<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="https://cecil.app/xsl/atom.xsl" media="all"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://cecil.app/</id>
  <title>Cecil</title>
  <subtitle><![CDATA[Cecil is a command-line PHP application that merges Markdown pages, medias and Twig templates to generate a static website.]]></subtitle>
  <link href="https://cecil.app/atom.xml" rel="self" type="application/atom+xml" />
  <link href="https://cecil.app/" rel="alternate" type="text/html" />
  <updated>2026-04-02T19:32:10+00:00</updated>
  <author>
    <name>Cecil</name>
    <uri>https://cecil.app</uri>
  </author>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2026/01/14/cecil-8.79.0-released/</id>
    <title>Cecil 8.79.0 released</title>
    <published>2026-01-14T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2026/01/14/cecil-8.79.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<p>This release updates the slugification logic to better handle multilingual content, especially Chinese characters, and refactors related code for improved maintainability. It also adds new test fixtures for French and Chinese blog posts to ensure proper handling of non-ASCII characters.</p>
<h3 id="slugification-improvements">Slugification improvements</h3>
<ul>
<li>Updated the <code>Page::slugify</code> method to detect Chinese (Han) characters in the input and apply the Chinese ruleset for slugification when appropriate, improving URL generation for Chinese content.</li>
<li>Refactored the <code>Url</code> class to delegate slugification to <code>Page::slugify</code>, removing its own slugifier instance and related logic for consistency and code reuse.</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2026/01/14/cecil-8.77.0-released/</id>
    <title>Cecil 8.77.0 released</title>
    <published>2026-01-13T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2026/01/14/cecil-8.77.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<p>This release refactors and simplifies the image resizing and cropping logic, consolidating the functionality into a single, more flexible <code>resize</code> method. It also updates related Twig filters and templates to use the new approach and improves error handling and documentation throughout the image processing.</p>
<h3 id="image-processing-api-refactor-and-simplification">Image processing API refactor and simplification</h3>
<ul>
<li>The <code>cover</code> method for cropping images to specific dimensions has been removed from both the <code>Asset</code> class and the Twig filters. All resizing and cropping operations are now handled via an enhanced <code>resize</code> method that accepts both width and height, and crops the image if both are provided.</li>
<li>The <code>resize</code> method in <code>Asset</code> and the corresponding Twig filter now accept both width and height as optional parameters, providing greater flexibility and reducing code duplication.</li>
<li>The <code>Image::resize</code> method is updated to handle both resizing and cropping, replacing both the previous <code>resize</code> and <code>cover</code> methods. It now also includes an option to remove animation from images.</li>
</ul>
<h3 id="template-and-filter-usage-updates">Template and filter usage updates</h3>
<ul>
<li>The <code>cover</code> Twig filter is removed, and all usages in templates are updated to use the new <code>resize(width, height)</code> signature.</li>
<li>The metatags template now uses the new <code>resize</code> filter for OpenGraph images, passing both width and height where appropriate.</li>
</ul>
<h3 id="error-handling-and-code-clarity">Error handling and code clarity</h3>
<ul>
<li>Exception messages throughout the image processing code have been standardized to include periods at the end and clarify the error context.</li>
<li>Minor code cleanups and improved documentation for image processing methods.</li>
</ul>
<h3 id="html-image-rendering-improvements">HTML image rendering improvements</h3>
<ul>
<li>The <code>sizes</code> attribute for <code>&lt;source&gt;</code> elements is now only included when not empty, preventing invalid HTML.</li>
<li>The <code>srcset</code> attribute is only added to images when it is not empty, improving output correctness.</li>
</ul>
<p>Overall, these changes modernize and streamline image handling, making the API easier to use and maintain.</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2025/12/31/cecil-8.76.0-released/</id>
    <title>Cecil 8.76.0 released</title>
    <published>2025-12-31T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2025/12/31/cecil-8.76.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<p>This release upgrades the project to require PHP 8.2 or higher. It also introduces support for desktop notifications and improves the build and test process. The most important changes are grouped below.</p>
<h3 id="php-version-and-dependency-upgrades">PHP Version and Dependency Upgrades</h3>
<p>The minimum required PHP version is now 8.2 (was 8.1), and support for PHP 8.1 is dropped across all configuration and documentation files, including composer.json, CI/CD workflows, and documentation.<br>
Symfony and related PHP package dependencies are updated from version 6.4 to 7.4, and other dependencies are also upgraded. New dependency <code>jolicode/jolinotif</code> is added, and <code>performing/twig-components</code> is bumped to ^0.7.</p>
<h3 id="documentation-updates">Documentation Updates</h3>
<p>All documentation, including the README and quick start guides, is updated to require PHP 8.2+.<br>
The build instructions now include steps for building both PHAR and full packages, and reference the new tools used.</p>
<h3 id="feature-additions">Feature Additions</h3>
<p>Adds a <code>--notif</code> option to CLI commands, enabling desktop notifications on build completion and server start.</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2025/12/09/cecil-8.75.0-released/</id>
    <title>Cecil 8.75.0 released</title>
    <published>2025-12-09T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2025/12/09/cecil-8.75.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<p>This release significantly enhances the asset handling system, especially for audio and video files. The changes include improved extraction and documentation of media metadata, new utility methods for assets, and codebase refactoring for clarity and maintainability.</p>
<h3 id="asset-metadata-and-api-enhancements">Asset Metadata and API Enhancements</h3>
<ul>
<li>Audio and video assets now expose richer metadata: audio assets provide <code>duration</code>, <code>bitrate</code>, and <code>channel</code>, while video assets provide <code>duration</code>, <code>width</code>, and <code>height</code>. These properties are now directly available on asset objects, making them easier to use in templates.</li>
</ul>
<h3 id="documentation-updates">Documentation Updates</h3>
<ul>
<li>The documentation for templates and asset usage is updated to reflect new asset properties and usage examples for audio and video files.</li>
</ul>
<p>These changes collectively make asset handling more powerful and easier to use, especially for media files, while improving code clarity and maintainability.</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2025/12/03/whats-new-since-8.37/</id>
    <title>What&#039;s new since version 8.37?</title>
    <published>2025-12-03T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2025/12/03/whats-new-since-8.37/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<p>The latest version is <strong>8.74</strong>, released on December 2, 2025. Here are the main new features and changes since version 8.37.</p>
<h3 id="major-new-features">Major new features</h3>
<ul>
<li><strong>Improved support for responsive images</strong> — Added support for pixel density (DPR) for responsive images (allows optimization of srcset for high-density screens).</li>
<li><strong>Ability to override robots.txt</strong> — Ability to create a <code>pages/robots.md</code> page to replace the default <code>robots.txt</code>. Useful for managing indexing exclusions per project.</li>
<li><strong>Improved post-processing</strong> — Continued use of extension/post-processor capabilities (inherited from the 8.x branch) to enable final output processing.</li>
</ul>
<h3 id="improvements-usability">Improvements &amp; usability</h3>
<ul>
<li><strong>Simplified configuration structure</strong> — Options are easier to disable (<code>option: false</code> or <code>option: enabled: false</code>); automatic import of theme configurations via <code>setConfig()</code> / <code>setSourceDir()</code>.</li>
<li><strong>Redesigned/enhanced cache</strong> — New, more robust cache mechanism (automatic rebuilding when files change), at the cost of a slight performance hit in some cases.</li>
<li><strong>Improved error message handling and display</strong> — Error messages are clearer to facilitate debugging.</li>
</ul>
<h3 id="major-fixes">Major fixes</h3>
<ul>
<li><strong>Updated remote asset management</strong> — Remote assets are better managed (caching, fallback, etc.).</li>
<li><strong>Fixes for templates and filters</strong> — Cleanup of deprecated elements/those left in the documentation (following the 8.0 → 8.x migration) and various fixes related to asset/template rendering.</li>
</ul>
<h3 id="breaking-changes-points-of-attention">Breaking changes &amp; points of attention</h3>
<ul>
<li><strong>Removal of default taxonomies</strong> — <code>tag</code> and <code>category</code> are no longer created automatically: if you were using these taxonomies, you must <strong>declare them explicitly</strong> in the <code>taxonomies:</code> configuration. There is a risk of broken pages if you update without adapting the configuration.</li>
<li><strong>Renaming/moving options</strong> — Several options have been renamed or moved (e.g., <code>pagination</code> → <code>pages:pagination</code>, <code>paths</code> → <code>pages:paths</code>, <code>remote_fallback</code> → <code>fallback</code>, <code>force_slash</code> → <code>leading_slash</code>).</li>
<li><strong>Check custom templates</strong> — Some deprecated Twig files and filters were removed in the 8.x updates; you should review and update your custom templates.</li>
</ul>
<hr>
<h3 id="recommended-actions-for-migration">Recommended actions for migration</h3>
<ol>
<li>Explicitly add <code>taxonomies:</code> if you plan to use <code>tags</code>/<code>category</code>.</li>
<li>Check and adapt the renamed options (pagination, paths, assets fallback, leading_slash).</li>
<li>Test the complete build and verify the cache/remote assets.</li>
<li>Review the Twig templates (deprecated functions/filters) and take advantage of new features (DPR/pixel density in images).</li>
</ol>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2025/04/23/cecil-8.37.0-released/</id>
    <title>Cecil 8.37.0 released</title>
    <published>2025-04-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2025/04/23/cecil-8.37.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="key-changes">Key changes</h3>
<ol>
<li>simplification of the configuration structure</li>
<li>cache enhancement: a little bit less performant but more comfortable</li>
<li>better errors message management</li>
</ol>
<h3 id="enhancements">Enhancements</h3>
<h4 id="configuration">Configuration</h4>
<ul>
<li>An option can be disabled directly with <code>option:false</code> or with the subkey <code>enabled</code>: <code>option:enabled:false</code></li>
<li>Themes configuration is automatticaly imported on <code>setConfig()</code> and <code>setSourceDir()</code></li>
<li>Deprecated options are now listed in the dedicated file <code>config/deprecated.php</code></li>
</ul>
<h4 id="cache-and-assets">Cache and assets</h4>
<ul>
<li>Cache mecachics rebuilded: it's a little bit less performant but it better handle files changed to refresh cache automatically</li>
<li>Remote files are now cached 7 days</li>
</ul>
<h3 id="breaking-changes">Breaking changes</h3>
<ul>
<li>Default taxonomies <code>tag</code> and <code>category</code> removed. If you used them, you must add each one to your site configuration</li>
<li>Configuration options moved:<ul>
<li><code>pagination</code> -&gt; <code>pages:pagination</code></li>
<li><code>paths</code> -&gt; <code>pages:paths</code></li>
</ul>
</li>
<li>Assets options renamed:<ul>
<li><code>remote_fallback</code> -&gt; <code>fallback</code></li>
<li><code>force_slash</code> -&gt; <code>leading_slash</code></li>
</ul>
</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/12/08/cecil-8.0.0-released/</id>
    <title>Cecil 8.0.0 released</title>
    <published>2023-12-08T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/12/08/cecil-8.0.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="enhancements">Enhancements</h3>
<ul>
<li>Extends Cecil with <a href="/documentation/extend/#output-post-processor">output post processors</a></li>
<li>Customized <em>Generator</em>, <em>Postprocessor</em> and <em>Extension</em> class available for themes too</li>
<li>Better configuration options hierarchy</li>
<li>Access to <em>raw</em> site configuration from a template with <a href="/documentation/templates/#site"><code>config.xxx</code></a></li>
<li>Configuration validation enhanced</li>
<li>Logs enhanced</li>
<li>Asset find file enhanced</li>
</ul>
<h3 id="breaking-changes">Breaking changes</h3>
<ul>
<li>Dropping support for PHP 7.x</li>
<li>No more legacy support of the <code>content</code> directory: use <code>pages</code> instead</li>
</ul>
<h4 id="configuration-options">Configuration options</h4>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">frontmatter:</span>
<span class="hljs-attr">body:</span>
<span class="hljs-attr">defaultpages:</span>
<span class="hljs-attr">virtualpages:</span>
<span class="hljs-attr">generators:</span>
<span class="hljs-attr">translations:</span>
<span class="hljs-attr">extensions:</span>
<span class="hljs-attr">postprocess:</span></code></pre>
<p>have been changed for:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">pages:</span>
  <span class="hljs-attr">frontmatter:</span>
  <span class="hljs-attr">body:</span>
  <span class="hljs-attr">default:</span>
  <span class="hljs-attr">virtual:</span>
  <span class="hljs-attr">generators:</span>
<span class="hljs-attr">layouts:</span>
  <span class="hljs-attr">translations:</span>
  <span class="hljs-attr">extensions:</span>
<span class="hljs-attr">optimize:</span></code></pre>
<h4 id="commands">Commands</h4>
<ul>
<li>The <a href="/documentation/commands/#build"><code>build</code></a> and <a href="/documentation/commands/#serve"><code>serve</code></a> command option <code>--postprocess</code> have been changed for <code>--optimize</code></li>
</ul>
<h4 id="templates">Templates</h4>
<ul>
<li><code>pagination.html.twig</code> removed (use <code>paginator.html.twig</code> instead)</li>
<li><code>googleanalytics.js.twig</code> removed</li>
<li>All deprecated functions and filters have been removed</li>
</ul>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix render default timezone</li>
<li>Fix <code>localizeddate</code> fallback filter</li>
<li>Fix <code>asset()</code> bundle</li>
<li>Fix HTML asset filter with WebP</li>
<li>Fix remote asset fallback</li>
</ul>
<h3 id="performance">Performance</h3>
<ul>
<li>Collection item access time enhanced</li>
<li><em>post processors</em> class autoloader moved</li>
<li><code>jsonld.js.twig</code> performances fixed</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li><a href="/documentation/">Documentation</a> updated</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>
<h3 id="tests">Tests</h3>
<ul>
<li>Test fixtures enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/08/16/cecil-7.45.0-released/</id>
    <title>Cecil 7.45.0 released</title>
    <published>2023-08-16T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/08/16/cecil-7.45.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="get-dimensions-of-a-video-asset">Get dimensions of a video asset</h4>
<pre><code class="language-twig hljs twig"><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">set</span></span> asset = asset('video.mp4') %}</span><span class="xml">
Dimensions: </span><span class="hljs-template-variable">{{ asset.video.width }}</span><span class="xml"> x </span><span class="hljs-template-variable">{{ asset.video.height }}</span></code></pre>
<p><a href="/documentation/templates/#asset-attributes">Documentation →</a></p>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/08/02/cecil-7.44.0-released/</id>
    <title>Cecil 7.44.0 released</title>
    <published>2023-08-02T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/08/02/cecil-7.44.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="disable-default-metatag-image">Disable default metatag image</h4>
<p>You can now disable the metatag image (Open Graph and co) with the following option:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-string">```yaml</span>
<span class="hljs-attr">metatags:</span>
  <span class="hljs-attr">image:</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span></code></pre>
<p><a href="/documentation/configuration/#metatags-configuration">Documentation →</a></p>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/06/22/cecil-7.43.0-released/</id>
    <title>Cecil 7.43.0 released</title>
    <published>2023-06-22T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/06/22/cecil-7.43.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-dump-function">New dump function</h4>
<p>The <code>d()</code> function is the HTML version of <a href="https://cecil.app/documentation/templates/#dump"><code>dump()</code></a> and use the <a href="https://symfony.com/doc/5.4/components/var_dumper.html" target="_blank" rel="noopener noreferrer">Symfony VarDumper Component</a> behind the scenes.</p>
<p><a href="/documentation/templates/#d">Documentation →</a></p>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li>Skeleton templates updates</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/06/04/cecil-7.40.0-released/</id>
    <title>Cecil 7.40.0 released</title>
    <published>2023-06-04T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/06/04/cecil-7.40.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="i18n-for-taxonomy">i18n for taxonomy</h4>
<p>Adds i18n support to the <a href="/documentation/content/#taxonomy">taxonomy</a> feature: you can use localized vocabularies and terms in your pages.</p>
<h5 id="configuration">Configuration</h5>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">taxonomies:</span>
  <span class="hljs-attr">categories:</span> <span class="hljs-string">categorie</span>
<span class="hljs-attr">languages:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">en</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">English</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">en</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">code:</span> <span class="hljs-string">fr</span>
    <span class="hljs-attr">name:</span> <span class="hljs-string">Français</span>
    <span class="hljs-attr">locale:</span> <span class="hljs-string">fr_FR</span>
    <span class="hljs-attr">config:</span>
      <span class="hljs-attr">taxonomies:</span>
        <span class="hljs-attr">catégories:</span> <span class="hljs-string">catégorie</span></code></pre>
<h5 id="page">Page</h5>
<p><em>example.fr.md:</em></p>
<pre><code>---
catégories: [Catégorie 1, Catégorie 2]
---</code></pre>
<h5 id="template">Template</h5>
<p><em>vocabulary.html.twig:</em></p>
<pre><code class="language-twig hljs twig"><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">ul</span>&gt;</span>
</span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">for</span></span> term in page.terms %}</span><span class="xml">
  <span class="hljs-tag">&lt;<span class="hljs-name">li</span>&gt;</span>
-    <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ url(page.path ~ '/' ~ term.id) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span></span><span class="hljs-template-variable">{{ term.name }}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span> (</span><span class="hljs-template-variable">{{ term|<span class="hljs-keyword">length</span> }}</span><span class="xml">)<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
+    <span class="hljs-tag">&lt;<span class="hljs-name">h2</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ url(term.id, {language: site.language}) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span></span><span class="hljs-template-variable">{{ term.name }}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span> (</span><span class="hljs-template-variable">{{ term|<span class="hljs-keyword">length</span> }}</span><span class="xml">)<span class="hljs-tag">&lt;/<span class="hljs-name">h2</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
</span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">endfor</span></span> %}</span><span class="xml">
<span class="hljs-tag">&lt;/<span class="hljs-name">ul</span>&gt;</span></span></code></pre>
<p><a href="/documentation/content/#taxonomy">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Do not remove the <code>section</code>variable of excluded pages</li>
<li>Fix live reload script injection</li>
<li>Fix <code>show:content</code> command</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li><code>show:config</code> command enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/05/24/cecil-7.39.0-released/</id>
    <title>Cecil 7.39.0 released</title>
    <published>2023-05-24T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/05/24/cecil-7.39.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="processing-time-and-consumed-memory">Processing time and consumed memory</h4>
<p>Display the processing time and consumed memory on each step, in verbose mode (<code>-vv</code>):</p>
<pre><code class="language-bash hljs bash">(...)
&lt;step name&gt; <span class="hljs-keyword">done</span> <span class="hljs-keyword">in</span> X.XX s (X mb)
(...)</code></pre>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code enhanced</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/05/23/cecil-7.38.0-released/</id>
    <title>Cecil 7.38.0 released</title>
    <published>2023-05-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/05/23/cecil-7.38.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="breaking-change">Breaking change</h3>
<h4 id="changes-id-of-localized-pages">Changes ID of localized pages</h4>
<p>The way to define a page ID have been refactored: the language code of a translated page is no more a suffix (<code>page.code</code>) and is now a prefix (<code>code/page</code>).</p>
<p>Example: <code>blog/post-1.fr</code> become <code>fr/blog/post-1</code>.</p>
<h3 id="fix">Fix</h3>
<ul>
<li><code>getIdWithoutLang()</code> fixed</li>
<li>Pagination sorting fixed</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li><code>native_function_invocation</code> rule applied for better performance (e.g.: <code>\is_array()</code> instead of <code>is_array()</code>)</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/05/22/cecil-7.37.0-released/</id>
    <title>Cecil 7.37.0 released</title>
    <published>2023-05-22T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/05/22/cecil-7.37.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-variable-page-paginator-links-path">New variable <code>page.paginator.links.path</code></h4>
<p>The <em>paginator</em> variable <code>page.paginator.links.path</code> returns the Page ID without position index.</p>
<p><em>Example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">if</span></span> page.paginator %}</span><span class="xml">
<span class="hljs-tag">&lt;<span class="hljs-name">div</span>&gt;</span>
  </span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">for</span></span> paginator_index in 1..page.paginator.count %}</span><span class="xml">
    </span><span class="hljs-comment">{# not the current page: URL #}</span><span class="xml">
    </span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">if</span></span> paginator_index != page.paginator.current %}</span><span class="xml">
      </span><span class="hljs-comment">{# the first page #}</span><span class="xml">
      </span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">if</span></span> paginator_index == 1 %}</span><span class="xml">
  <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ url(page.paginator.links.first) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span></span><span class="hljs-template-variable">{{ paginator_index }}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
      </span><span class="hljs-template-tag">{% <span class="hljs-name">else</span> %}</span><span class="xml">
  <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ url(page.paginator.links.path ~ '/' ~ paginator_index) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span></span><span class="hljs-template-variable">{{ paginator_index }}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
      </span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">endif</span></span> %}</span><span class="xml">
    </span><span class="hljs-comment">{# the current page: not URL #}</span><span class="xml">
    </span><span class="hljs-template-tag">{% <span class="hljs-name">else</span> %}</span><span class="xml">
  </span><span class="hljs-template-variable">{{ paginator_index }}</span><span class="xml">
    </span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">endif</span></span> %}</span><span class="xml">
  </span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">endfor</span></span> %}</span><span class="xml">
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span>
</span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">endif</span></span> %}</span></code></pre>
<p><a href="/documentation/templates/#page-paginator">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix metatags favicon asset</li>
<li>Fix <code>clear-cache</code> command option</li>
<li>Fix console debug mode</li>
<li>Fix logo in JSON-LD template</li>
<li>Fix JSON templates</li>
<li><code>&lt;script&gt;</code> tag added to live reload script (by <a href="https://github.com/ahnlak" target="_blank" rel="noopener noreferrer">@ahnlak</a>)</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li>Use Composer <code>dump-autoloader</code>directive for better performance</li>
<li>Step logged messages enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/04/15/cecil-7.36.0-released/</id>
    <title>Cecil 7.36.0 released</title>
    <published>2023-04-15T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/04/15/cecil-7.36.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-taxonomy-template-lookup-rule">New taxonomy template lookup rule</h4>
<p>You can now easily create a custom template to list pages of a specific taxonomy term (<em>singular</em>): <code>taxonomy/&lt;singular&gt;.&lt;format&gt;.twig</code> (Request <a href="https://github.com/Cecilapp/Cecil/issues/1669" target="_blank" rel="noopener noreferrer">#1669</a>).</p>
<p><a href="/documentation/templates/#type-term">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix favicons generation</li>
<li>Fix <code>html</code> filter in case of <code>class</code> attribute if empty</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Documentation globally enhanced</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li>Code coverage: add tests for image asset handling</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/04/11/cecil-7.35.0-released/</id>
    <title>Cecil 7.35.0 released</title>
    <published>2023-04-11T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/04/11/cecil-7.35.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-asset-filter-and-functions-for-images">New asset filter and functions for images</h4>
<p>Convert an image to the <a href="https://developers.google.com/speed/webp" target="_blank" rel="noopener noreferrer">WebP</a> format:</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ asset|webp }}</span></code></pre>
<p><a href="/documentation/templates/#webp">Documentation →</a></p>
<p>Build <code>srcset</code> attribute from an asset and retrieve available <code>sizes</code> for a given class name:</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ image_srcset(asset) }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ image_sizes('class') }}</span></code></pre>
<p><a href="/documentation/templates/#image-srcset">Documentation →</a></p>
<p><em>Example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">set</span></span> photo = asset('photo.jpg') %}</span><span class="xml">
<span class="hljs-tag">&lt;<span class="hljs-name">picture</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">source</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"image/webp"</span> <span class="hljs-attr">srcset</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image_srcset(photo|webp) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">sizes</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image_sizes('photo') }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ url(photo) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ photo.width }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ photo.height }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">""</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"photo"</span> <span class="hljs-attr">srcset</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image_srcset(photo) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">sizes</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image_sizes('photo') }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">picture</span>&gt;</span></span></code></pre>
<h3 id="fix">Fix</h3>
<ul>
<li>Disable <code>dataurl</code> filter for SVG</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/04/06/cecil-7.34.0-released/</id>
    <title>Cecil 7.34.0 released</title>
    <published>2023-04-06T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/04/06/cecil-7.34.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="lqip-filter">LQIP filter</h4>
<p>The Twig filter <code>lqip</code> returns a <a href="https://www.guypo.com/introducing-lqip-low-quality-image-placeholders" target="_blank" rel="noopener noreferrer">Low Quality Image Placeholder</a> (LQIP) as data URL.</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ asset(image_path)|lqip }}</span></code></pre>
<p><a href="/documentation/templates/#lqip">Documentation →</a></p>
<p><em>Example:</em></p>
<pre><code class="language-html hljs xml">{% set photo_full = asset('/photo.jpeg') %}
{% set photo = photo_full|resize(640) %}
<span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"background-image:url({{ photo|lqip }});background-repeat:no-repeat;background-position:center;background-size:cover;"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"{{ url(photo_full) }}"</span>&gt;</span>{{ photo|html }}<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<p><em>Example of progressive loading of <a href="https://photo-stream-demo.cecil.app/" target="_blank" rel="noopener noreferrer">images gallery</a>:</em></p>
<figure>
<picture title="Images are not loaded, only LQIP are visible in background.">
<source type="image/avif" srcset="/thumbnails/480x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.avif 480w, /thumbnails/768x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.avif 768w, /thumbnails/1024x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.avif 1024w" width="1024" height="613" sizes="100vw">
<source type="image/webp" srcset="/thumbnails/480x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.webp 480w, /thumbnails/768x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.webp 768w, /thumbnails/1024x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.webp 1024w" width="1024" height="613" sizes="100vw">
<img src="/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.png" alt="LQIP low quality images" loading="lazy" decoding="async" class="dark:brightness-90" width="1024" height="613" style=";max-width:100%;height:auto;background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:center;background-size:cover;" srcset="/thumbnails/480x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.png 480w, /thumbnails/768x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.png 768w, /thumbnails/1024x/images/news/LQIP-low-quality-images.ff6cec9c126d936ee05a742063a8ffc3.png 1024w" sizes="100vw">
</picture>
<figcaption>Images are not loaded, only LQIP are visible in background.</figcaption>
</figure>
<figure>
<picture title="Images completely loaded.">
<source type="image/avif" srcset="/thumbnails/480x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.avif 480w, /thumbnails/768x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.avif 768w, /thumbnails/1024x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.avif 1024w" width="1024" height="613" sizes="100vw">
<source type="image/webp" srcset="/thumbnails/480x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.webp 480w, /thumbnails/768x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.webp 768w, /thumbnails/1024x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.webp 1024w" width="1024" height="613" sizes="100vw">
<img src="/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.png" alt="Images loaded" loading="lazy" decoding="async" class="dark:brightness-90" width="1024" height="613" style=";max-width:100%;height:auto;background-image:url(data:image/png;base64,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);background-repeat:no-repeat;background-position:center;background-size:cover;" srcset="/thumbnails/480x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.png 480w, /thumbnails/768x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.png 768w, /thumbnails/1024x/images/news/LQIP-images-loaded.383b5f23525048692e47552e92d50f25.png 1024w" sizes="100vw">
</picture>
<figcaption>Images completely loaded.</figcaption>
</figure>
<h3 id="潤獣">Docs</h3>
<ul>
<li><em>imgix</em> CDN configuration added</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li>Better image handling</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/03/20/cecil-7.33.0-released/</id>
    <title>Cecil 7.33.0 released</title>
    <published>2023-03-20T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/03/20/cecil-7.33.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="support-of-image-cdn">Support of image CDN</h4>
<p>You can easily use a CDN to provide the images of your site, for example:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">cdn:</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>
      <span class="hljs-comment"># Cloudimage</span>
      <span class="hljs-attr">account:</span> <span class="hljs-string">'xxxx'</span>
      <span class="hljs-attr">url:</span> <span class="hljs-string">'https://%account%.cloudimg.io/%image_url%?w=%width%&amp;q=%quality%&amp;force_format=%format%'</span></code></pre>
<p><a href="/documentation/configuration/cdn-providers/">CDN providers →</a></p>
<p><a href="/documentation/configuration/#image-cdn">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix link to Markdown file, with anchor</li>
<li>Fix duplicated responsive image</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Commands list updated</li>
<li>Images documentation enhanced</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Assets and WebP converter code refactored</li>
<li>Add auto-refresh to 404 locally served page</li>
<li>Better responsive widths</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/03/09/cecil-7.32.0-released/</id>
    <title>Cecil 7.32.0 released</title>
    <published>2023-03-09T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/03/09/cecil-7.32.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="decoding-async-added-to-images"><code>decoding="async"</code> added to images</h4>
<p>The attribute <code>decoding="async"</code> is automatically added to Markdown images.</p>
<p><em>Example:</em></p>
<pre><code class="language-markdown hljs markdown">![](/image.jpg)</code></pre>
<p>Is converted to:</p>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/image.jpg"</span> <span class="hljs-attr">decoding</span>=<span class="hljs-string">"async"</span>&gt;</span></code></pre>
<p><a href="/documentation/content/#decoding">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix default class in Markdown images</li>
<li>Fix configuration error messages</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Update <code>metatags</code> configuration</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li>Code coverage enhanced</li>
<li>Print a message if the EXIF extension is loaded</li>
<li><code>exif_read_data</code> error handler refactored</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/03/07/cecil-7.31.0-released/</id>
    <title>Cecil 7.31.0 released</title>
    <published>2023-03-07T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/03/07/cecil-7.31.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="exif-and-audio-data">EXIF and audio data</h4>
<p>EXIF and audio data are available for <a href="/documentation/templates/#site-static">static files</a> and <a href="/documentation/templates/#asset-attributes">asset</a>.</p>
<p><em>EXIF Example:</em></p>
<pre><code class="language-twig hljs twig"><span class="xml"># photo's date in seconds
</span><span class="hljs-template-variable">{{ asset('photo.jpeg').exif.DateTimeOriginal|<span class="hljs-keyword">date</span>('U') }}</span></code></pre>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix cache tag for image quality</li>
<li>Fix default layout page CSS</li>
<li>Fix <code>url(page)</code> default output format</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/02/23/cecil-7.30.0-released/</id>
    <title>Cecil 7.30.0 released</title>
    <published>2023-02-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/02/23/cecil-7.30.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="add-base-page-url-to-toc-anchor">Add base page URL to TOC anchor</h4>
<p><em>Example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ page.body|toc('html', 'https://example.com/page/') }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ page.body|toc(url=url(page)) }}</span></code></pre>
<p><a href="/documentation/templates/#toc">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix <a href="/documentation/templates/#sort-by-date"><code>sort_by_date</code></a> filter</li>
<li>Fix default page layout</li>
<li>Fix Markdown image title</li>
<li>Fix path in case of only one page is loaded</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Remove Forestry references (because <a href="https://tina.io/forestry/" target="_blank" rel="noopener noreferrer">Forestry is dead</a>)</li>
<li>Update <a href="/documentation/deploy/"><em>Deploy</em></a></li>
<li>Update templates</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2023/01/04/cecil-7.29.0-released/</id>
    <title>Cecil 7.29.0 released</title>
    <published>2023-01-04T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2023/01/04/cecil-7.29.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="json-feed-output-format">JSON Feed output format</h4>
<p>Add support of <a href="https://www.jsonfeed.org/" target="_blank" rel="noopener noreferrer">JSON Feed</a> as output format.</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">output:</span>
  <span class="hljs-attr">pagetypeformats:</span>
    <span class="hljs-attr">section:</span> <span class="hljs-string">['html',</span> <span class="hljs-string">'atom'</span><span class="hljs-string">,</span> <span class="hljs-string">'jsonfeed'</span><span class="hljs-string">]</span></code></pre>
<p><a href="/documentation/configuration/#pagetypeformats">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Enforcing runtime checks for required PHP extensions (by <a href="https://github.com/benjaminhirsch" target="_blank" rel="noopener noreferrer">@benjaminhirsch</a>)</li>
<li>Fix pages filter and map in render step</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code enhanced</li>
<li>Dependencies updated</li>
<li><code>symfony/polyfill-intl-icu</code> added</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/11/25/cecil-7.28.0-released/</id>
    <title>Cecil 7.28.0 released</title>
    <published>2022-11-25T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/11/25/cecil-7.28.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<ul>
<li>Feeds links available from pages in a section</li>
<li>Cecil is now available through <a href="/download/#macos">Homebrew</a></li>
</ul>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix French translation</li>
<li>Fix remote asset files handling</li>
<li>Handling of video files by the local server</li>
<li>Fix homepage generator if no other pages</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Minor updates</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Feeds XSL refactored</li>
<li>Better local server 404 page</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/11/05/cecil-7.27.0-released/</id>
    <title>Cecil 7.27.0 released</title>
    <published>2022-11-05T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/11/05/cecil-7.27.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="remove-cache-files-by-regular-expression">Remove cache files by regular expression</h4>
<p><em>Example:</em></p>
<pre><code class="language-bash hljs bash">php cecil.phar serve --clear-cache=<span class="hljs-string">"\.css"</span></code></pre>
<blockquote>
<p>Removes cached CSS files and preserves the rest of the cache.</p>
</blockquote>
<p><a href="/documentation/commands/#serve">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Pattern used in cache prune method</li>
<li>Should not convert a line link in block</li>
<li>Fix favicon sizes attribute</li>
<li>Minor fix on Markdown convertor</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Content page updated</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code commented</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/31/cecil-7.25.0-released/</id>
    <title>Cecil 7.25.0 released</title>
    <published>2022-10-31T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/31/cecil-7.25.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="custom-responsive-image-sizes">Custom responsive image <code>sizes</code></h4>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/assets/thumbnails/800/image.jpg"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"800"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"600"</span>
  <span class="hljs-attr">srcset</span>=<span class="hljs-string">"/assets/thumbnails/320/image.jpg 320w,
          /assets/thumbnails/640/image.jpg 640w,
          /assets/thumbnails/800/image.jpg 800w"</span>
  <span class="hljs-attr">sizes</span>=<span class="hljs-string">"100vw"</span>
&gt;</span></code></pre>
<p>The <code>sizes</code> attribute take the value of the <code>assets.images.responsive.sizes.default</code> configuration option by default, and can be customized by creating a new entry named with the class name added to the image.</p>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">responsive:</span>
      <span class="hljs-attr">sizes:</span>
        <span class="hljs-attr">default:</span> <span class="hljs-string">100vw</span>
        <span class="hljs-attr">my_class:</span> <span class="hljs-string">"(max-width: 800px) 768px, 1024px"</span></code></pre>
<pre><code class="language-markdown hljs markdown">![](/image.jpg){.my_class}</code></pre>
<p><a href="/documentation/configuration/#assets">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Normalize page path to build</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/31/cecil-7.26.0-released/</id>
    <title>Cecil 7.26.0 released</title>
    <published>2022-10-31T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/31/cecil-7.26.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="create-caption-for-images-and-embed-links-having-a-title">Create caption for images and embed links having a title</h4>
<p>The optional title can be used to create a caption (<code>figcaption</code>) automatically by enabling the <a href="/documentation/configuration/#body"><code>caption</code> option</a>.</p>
<p><em>Example:</em></p>
<pre><code class="language-markdown hljs markdown">![](/images/img.jpg "Title")</code></pre>
<p>Is converted to:</p>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">figure</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/image.jpg"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Title"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">figcaption</span>&gt;</span>Title<span class="hljs-tag">&lt;/<span class="hljs-name">figcaption</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">figure</span>&gt;</span></code></pre>
<p><a href="/documentation/content/#caption">Documentation →</a></p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/30/cecil-7.24.0-released/</id>
    <title>Cecil 7.24.0 released</title>
    <published>2022-10-30T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/30/cecil-7.24.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="turn-a-link-into-a-video-or-audio-element">Turn a link into a video or audio element</h4>
<pre><code class="language-markdown hljs markdown">[<span class="hljs-string">The video</span>](<span class="hljs-link">/video/test.mp4</span>){controls poster=/images/video-test.png style="width:100%;"}</code></pre>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">video</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/video/test.mp4"</span> <span class="hljs-attr">controls</span> <span class="hljs-attr">poster</span>=<span class="hljs-string">"/images/video-test.png"</span> <span class="hljs-attr">style</span>=<span class="hljs-string">"width:100%;"</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">video</span>&gt;</span></code></pre>
<p><a href="/documentation/content/#embedded-links">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Converts page even it contain a wrong language code</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/29/cecil-7.23.0-released/</id>
    <title>Cecil 7.23.0 released</title>
    <published>2022-10-29T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/29/cecil-7.23.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-option-to-add-default-class-to-body-images">New option to add default class to body images</h4>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">body:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">class:</span> <span class="hljs-string">''</span> <span class="hljs-comment"># put default class to each image (empty by default)</span></code></pre>
<p><a href="/documentation/configuration/#body">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix Twitter account in <a href="/documentation/configuration/#metatags"><em>metatags</em></a> template</li>
<li>Fix embedded links disable option</li>
<li>Apply custom path before the convert step (create)</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Content page updated</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/25/cecil-7.20.0-released/</id>
    <title>Cecil 7.20.0 released</title>
    <published>2022-10-25T00:00:00+00:00</published>
    <updated>2023-10-26T00:00:00+00:00</updated>
    <link href="https://cecil.app/news/2022/10/25/cecil-7.20.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-canonical-variable-to-override-the-generated-canonical-url">New <code>canonical</code> variable to override the generated canonical URL</h4>
<p>If the partial <code>metatags.html.twig</code> is included in your main template, a canonical URL is automatically added to the page <code>&lt;head&gt;</code>.<br>
With the <code>canonical</code> variable (set in page <a href="/documentation/content/#front-matter">front matter</a>) you can override the canonical URL and the canonical title:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">canonical:</span>
  <span class="hljs-attr">url:</span> <span class="hljs-string">&lt;URL&gt;</span>
  <span class="hljs-attr">title:</span> <span class="hljs-string">"&lt;URL title&gt;"</span> <span class="hljs-comment"># optional</span></code></pre>
<p><a href="/documentation/configuration/#metatags-options-and-front-matter">Documentation →</a></p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/25/cecil-7.21.0-released/</id>
    <title>Cecil 7.21.0 released</title>
    <published>2022-10-25T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/25/cecil-7.21.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="local-fallback-for-remote-images">Local fallback for remote images</h4>
<p>You can specify a – generic – fallback image in case of remote images are not available.</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">body:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">remote:</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>
      <span class="hljs-attr">fallback:</span>
        <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span> <span class="hljs-comment"># enables a fallback if remote image is not found (false by default)</span>
        <span class="hljs-attr">path:</span> <span class="hljs-string">'images/no-image.png'</span> <span class="hljs-comment"># path to the fallback image, stored in `assets` dir (empty by default)</span></code></pre>
<p><a href="/documentation/configuration/#body">Documentation →</a></p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/25/cecil-7.22.0-released/</id>
    <title>Cecil 7.22.0 released</title>
    <published>2022-10-25T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/25/cecil-7.22.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="support-of-embed-github-gist-link">Support of embed GitHub Gist link</h4>
<p>GitHub Gist can be easly embed by adding the <code>{embed}</code> attribute.</p>
<pre><code class="language-markdown hljs markdown">[<span class="hljs-string">Cecil build script</span>](<span class="hljs-link">https://gist.github.com/ArnaudLigny/6b2aa9e6b25581c96435e9296efe0c0e</span>){embed}</code></pre>
<p><script src="https://gist.github.com/ArnaudLigny/6b2aa9e6b25581c96435e9296efe0c0e.js"></p>
<p><a href="/documentation/content/#embedded-links">Documentation →</a></p>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/24/cecil-7.19.0-released/</id>
    <title>Cecil 7.19.0 released</title>
    <published>2022-10-24T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/24/cecil-7.19.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="link-to-a-page-in-a-markdown-link">Link to a page in a markdown link</h4>
<p>You can easily create a link to a page with the syntax <code>[Page title](page:page-id)</code>.</p>
<p>Example:</p>
<pre><code class="language-markdown hljs markdown">[<span class="hljs-string">Link to a blog post</span>](<span class="hljs-link">page:blog/post-1</span>)</code></pre>
<p><a href="/documentation/content/#link-to-a-page">Documentation →</a></p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/23/cecil-7.18.0-released/</id>
    <title>Cecil 7.18.0 released</title>
    <published>2022-10-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/23/cecil-7.18.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="embed-a-youtube-video-from-a-markdown-link">Embed a YouTube video from a Markdown link</h4>
<p>You can let Cecil tries to turns a link into an embedded content by using the <code>{embed=true}</code>:</p>
<p>Example:</p>
<pre><code class="language-markdown hljs markdown">[<span class="hljs-string">An example YouTube video</span>](<span class="hljs-link">https://www.youtube.com/watch?v=Dj-rKHmLp5w</span>){embed=true}</code></pre>
<p><a href="/documentation/content/#embedded-links">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix image figure caption</li>
<li>Do not double sub slug prefix</li>
<li>Fix generator meta if there is no spaces before</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/19/cecil-7.17.0-released/</id>
    <title>Cecil 7.17.0 released</title>
    <published>2022-10-19T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/19/cecil-7.17.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="normalize-asset-path-in-markdown">Normalize asset path in Markdown</h4>
<p>A static or asset file relative path is automatically normalized.</p>
<p><em>Example:</em></p>
<pre><code class="language-markdown hljs markdown">![](../../assets/images/image.jpeg)</code></pre>
<p>Become:</p>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/images/image.jpeg"</span>&gt;</span></code></pre>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix path to assets cache directory</li>
<li>Error if wrong relative to parent asset path</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/16/cecil-7.16.0-released/</id>
    <title>Cecil 7.16.0 released</title>
    <published>2022-10-16T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/16/cecil-7.16.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="support-of-markdown-in-figcaption-of-an-image">Support of Markdown in <code>&lt;figcaption&gt;</code> of an image</h4>
<p>Example:</p>
<pre><code class="language-markdown hljs markdown">![<span class="hljs-string">Alternative description</span>](<span class="hljs-link">/image.jpg "Photo about [Cecil](https://cecil.app</span>)")</code></pre>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">figure</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"/image.jpg"</span> <span class="hljs-attr">alt</span>=<span class="hljs-string">"Alternative description"</span> <span class="hljs-attr">title</span>=<span class="hljs-string">"Photo about Cecil"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">figcaption</span>&gt;</span>Photo about <span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"https://cecil.app"</span>&gt;</span>Cecil<span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">figcaption</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">figure</span>&gt;</span></code></pre>
<p><a href="/documentation/content/#caption">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Do not override image <code>loading</code> attribute</li>
<li>Add version to asset cache key</li>
<li>Fix bundle files path</li>
<li>Fix <code>excerpt_html</code> filter options handling</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Add notice about cache</li>
<li>Update templates</li>
<li>Update content</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code cleaned</li>
<li>Exception message if theme not installed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/12/cecil-7.15.0-released/</id>
    <title>Cecil 7.15.0 released</title>
    <published>2022-10-12T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/12/cecil-7.15.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="support-of-custom-twig-extensions">Support of custom Twig extensions</h4>
<p>It is now possible to use custom functions and filters.</p>
<p><a href="/documentation/templates/#custom-extension">Documentation →</a></p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/11/cecil-7.14.0-released/</id>
    <title>Cecil 7.14.0 released</title>
    <published>2022-10-11T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/11/cecil-7.14.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="options-for-sortby-front-matter-variable">Options for 'sortby' front matter variable</h4>
<pre><code class="language-yaml hljs yaml"><span class="hljs-meta">---</span>
<span class="hljs-attr">sortby:</span>
  <span class="hljs-attr">variable:</span> <span class="hljs-string">date</span>    <span class="hljs-comment"># date, updated, title or weight</span>
  <span class="hljs-attr">desc_title:</span> <span class="hljs-literal">false</span> <span class="hljs-comment"># used with date or updated variables to sort by desc title order if items have same date</span>
  <span class="hljs-attr">reverse:</span> <span class="hljs-literal">false</span>    <span class="hljs-comment"># reversed if true</span>
<span class="hljs-meta">---</span></code></pre>
<p><a href="/documentation/content/#sortby">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Reverse sort by date if the same date</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Update sorts filter</li>
<li>Update templates</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Images handling enhanced</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/05/cecil-7.13.0-released/</id>
    <title>Cecil 7.13.0 released</title>
    <published>2022-10-05T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/05/cecil-7.13.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="fetch-the-dominant-color-of-an-image">Fetch the dominant color of an image</h4>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ asset(image_path)|dominant_color }}</span><span class="xml">
# #F2D07F</span></code></pre>
<p><a href="/documentation/templates/#dominant-color">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Try to apply responsive on image asset only</li>
<li>Fix JSON internal templates</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Code enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/03/cecil-7.12.0-released/</id>
    <title>Cecil 7.12.0 released</title>
    <published>2022-10-03T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/03/cecil-7.12.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-toc-template-filter">New 'toc' template filter</h4>
<p>Extracts table of content from a Markdown string, in the given format ("html" or "json", "html" by default).</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ page.body|toc }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ page.body|toc('html') }}</span><span class="xml">
</span><span class="hljs-template-variable">{{ page.body|toc('json') }}</span></code></pre>
<p><a href="/documentation/templates/#toc">Documentation →</a></p>
<h4 id="new-formats-supported-by-front-matter">New formats supported by front matter</h4>
<p>2 new formats are now supported by front matter: <a href="https://m.wikipedia.org/wiki/JSON" target="_blank" rel="noopener noreferrer">JSON</a> and <a href="https://m.wikipedia.org/wiki/TOML" target="_blank" rel="noopener noreferrer">TOML</a>.</p>
<p><a href="/documentation/configuration/#frontmatter">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Fix feeds layout and XSL template</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Update documentation about l10n</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/10/02/cecil-7.11.0-released/</id>
    <title>Cecil 7.11.0 released</title>
    <published>2022-10-02T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/10/02/cecil-7.11.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="add-language-option-to-template-url-function">Add 'language' option to template url() function</h4>
<p>Example:</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ url('page-id', {'language': 'fr'}) }}</span></code></pre>
<p><a href="/documentation/templates/#url">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Detection of internal translation file</li>
<li>Phar must include <em>mo</em> files</li>
<li>Load root locale version of a translation if exists</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Update templates documentation</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/30/cecil-7.9.0-released/</id>
    <title>Cecil 7.9.0 released</title>
    <published>2022-09-30T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/30/cecil-7.9.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-command-to-extract-templates">New command to extract templates</h4>
<p>Extracts built-in templates in the "layouts" directory of your site.</p>
<p>Usage:</p>
<pre><code class="language-bash hljs bash">php cecil.phar util:extract</code></pre>
<h3 id="fix">Fix</h3>
<ul>
<li>Asset as string must return a valid URL</li>
<li>Paginator backward compatibility</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Paginator details updated</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Built-in templates updated</li>
<li>Skeleton enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/30/cecil-7.10.0-released/</id>
    <title>Cecil 7.10.0 released</title>
    <published>2022-09-30T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/30/cecil-7.10.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="internal-translations">Internal translations</h4>
<p>Add translation support of internal templates.</p>
<h3 id="fix">Fix</h3>
<ul>
<li>Translation in feed template</li>
<li>Do not try to resize missing favicon</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Cleaning internal templates</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/28/cecil-7.8.0-released/</id>
    <title>Cecil 7.8.0 released</title>
    <published>2022-09-28T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/28/cecil-7.8.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-paginator">New paginator</h4>
<p>Pagination now support multilanguages and the dedicated template variable have been renamed: <a href="https://cecil.app/documentation/templates/#page-paginator"><code>page.paginator</code></a>.</p>
<h3 id="fix">Fix</h3>
<ul>
<li>Remove duplicated vocabulary terms</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/24/cecil-7.7.0-released/</id>
    <title>Cecil 7.7.0 released</title>
    <published>2022-09-24T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/24/cecil-7.7.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="multiple-formats-translation">Multiple formats translation</h4>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">translations:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">translations</span>       <span class="hljs-comment"># translations directory</span>
  <span class="hljs-attr">formats:</span> <span class="hljs-string">['yaml',</span> <span class="hljs-string">'mo'</span><span class="hljs-string">]</span> <span class="hljs-comment"># translations files format (`yaml` and `mo` by default)</span></code></pre>
<p><a href="/documentation/configuration/#translations">Documentation →</a></p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/23/cecil-7.6.0-released/</id>
    <title>Cecil 7.6.0 released</title>
    <published>2022-09-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/23/cecil-7.6.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="print-memory-usage-in-verbose-mode">Print memory usage in verbose mode</h4>
<p>Example:</p>
<pre><code class="language-bash hljs bash">php cecil build -v
Building website...
Path: /website
Config: /website/config.yml
Cache: /website/.cache
 1. Importing themes configuration
 2. Loading pages
 3. Creating pages
 4. Converting pages
 5. Creating taxonomies
 6. Generating pages
 7. Creating menus
 8. Copying static
 9. Rendering pages
10. Saving pages
Built <span class="hljs-keyword">in</span> 14 s (19.67 mb)</code></pre>
<h3 id="fix">Fix</h3>
<ul>
<li>URL must return a string</li>
<li>Set locale only if Intl ext is loaded</li>
<li>Template filters: turns null value in empty value</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li>Important message about Intl and <a href="/documentation/templates/#date-localization">date localization</a></li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/19/cecil-7.4.0-released/</id>
    <title>Cecil 7.4.0 released</title>
    <published>2022-09-19T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/19/cecil-7.4.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="better-prev-and-next-navigation-in-section">Better prev and next navigation in section</h4>
<p>Variables <code>page.prev</code> and <code>page.next</code> now contains the page item, so it's easier to access of all properties of the page.</p>
<p>For example:</p>
<pre><code class="language-twig hljs twig"><span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">a</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ url(page.prev) }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span>&gt;</span></span><span class="hljs-template-variable">{{ page.prev.title }}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">a</span>&gt;</span></span></code></pre>
<p><a href="/documentation/templates/#page-prev-next">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>The template filter <code>filter_by</code> must return <code>type::page</code> only</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/19/cecil-7.5.0-released/</id>
    <title>Cecil 7.5.0 released</title>
    <published>2022-09-19T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/19/cecil-7.5.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="checks-default-language-and-locale-configuration">Checks default language and locale configuration</h4>
<p>Checks if:</p>
<ul>
<li>default language is valid</li>
<li>locale of each language is valid</li>
</ul>
<h3 id="fix">Fix</h3>
<ul>
<li>URL must return a string</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/18/cecil-7.3.0-released/</id>
    <title>Cecil 7.3.0 released</title>
    <published>2022-09-18T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/18/cecil-7.3.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="support-of-custom-localized-path-for-section">Support of custom (localized) <code>path</code> for section</h4>
<p>Sections (i.e.: <code>section/index.md</code>) now support custom <code>path</code>:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">path:</span> <span class="hljs-string">custom/path/</span></code></pre>
<p><a href="/documentation/content/#predefined-variables">Documentation →</a></p>
<p>The custom <code>path</code> of a section can be different by language:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">paths:</span>
  <span class="hljs-bullet">-</span> <span class="hljs-attr">section:</span> <span class="hljs-string">&lt;section’s</span> <span class="hljs-string">name&gt;</span>
    <span class="hljs-attr">language:</span> <span class="hljs-string">&lt;language&gt;</span> <span class="hljs-comment"># optional</span>
    <span class="hljs-attr">path:</span> <span class="hljs-string">&lt;path</span> <span class="hljs-string">of</span> <span class="hljs-string">pages,</span> <span class="hljs-string">with</span> <span class="hljs-string">palceholders&gt;</span></code></pre>
<p><a href="/documentation/configuration/#paths">Documentation →</a></p>
<h3 id="fix">Fix</h3>
<ul>
<li>Better detection of asset, based on file extension</li>
<li>Catch error if date is null</li>
</ul>
<h3 id="潤獣">Docs</h3>
<ul>
<li><a href="https://github.com/Cecilapp/Cecil/blob/master/docs/charts/cecil-build-life-cycle.png" target="_blank" rel="noopener noreferrer">Build life cycle diagram</a> updated</li>
</ul>
<h3 id="miscs">Miscs</h3>
<ul>
<li>Dependencies updated</li>
<li>Code cleaned and enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/12/cecil-7.2.0-released/</id>
    <title>Cecil 7.2.0 released</title>
    <published>2022-09-12T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/12/cecil-7.2.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="debug-output-of-translations">Debug output of translations</h4>
<p>If <em>build</em> or <em>server</em> command is ran in debug mode (e.g.: <code>php cecil.phar serve -vvv</code>) some details about translations are printed :</p>
<pre><code class="language-bash hljs bash">Translation loader <span class="hljs-keyword">for</span> format <span class="hljs-string">"yaml"</span> found
Translation loader <span class="hljs-keyword">for</span> format <span class="hljs-string">"mo"</span> found
Translation file <span class="hljs-string">"path/translations/messages.fr.yaml"</span> added
Translation file <span class="hljs-string">"path/translations/messages.fr.mo"</span> added
Intl extension is loaded</code></pre>
<p>It is useful to know:</p>
<ol>
<li>what translations loaders are used</li>
<li>what files are added to translations catalog</li>
<li>if the Intl extension is available on the system</li>
</ol>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Loads translations even if there is only 1 language configured</li>
<li>Pagination template (<code>partials/paginator.html.twig</code>) fixed</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Code enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/08/cecil-7.0.0-released/</id>
    <title>Cecil 7.0.0 released</title>
    <published>2022-09-08T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/08/cecil-7.0.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="i18n-support-migrated-to-symfony-translation-twig-intl">i18n support migrated to Symfony Translation + Twig Intl</h4>
<p><a href="https://github.com/Cecilapp/Twig-extensions" target="_blank" rel="noopener noreferrer">Twig Extensions</a> have been removed in favor of <a href="https://symfony.com/doc/5.4/translation.html" target="_blank" rel="noopener noreferrer">Symfony Translation</a> and <a href="https://github.com/twigphp/intl-extra" target="_blank" rel="noopener noreferrer">Twig Intl Extension</a>.</p>
<p>With Symfony Translation <em>Gettext</em> is no more required.</p>
<p><strong>Breaking changes</strong> about localization:</p>
<ol>
<li>the short <em>trans</em> tag <code>{% trans "text" %}</code> is no more supported</li>
<li>variables must set between <code>%%</code> instead of <code>{{}}</code></li>
<li><code>localizeddate</code> filter is replaced by <code>format_date</code></li>
</ol>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/08/cecil-7.1.0-released/</id>
    <title>Cecil 7.1.0 released</title>
    <published>2022-09-08T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/08/cecil-7.1.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="translations-configuration-options">Translations configuration options</h4>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">translations:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">translations</span>       <span class="hljs-comment"># translations directory</span>
  <span class="hljs-attr">formats:</span> <span class="hljs-string">['yaml',</span> <span class="hljs-string">'mo'</span><span class="hljs-string">]</span> <span class="hljs-comment"># translations files format (`yaml` and `mo` by default)</span></code></pre>
<p>Refer to the <a href="/documentation/configuration/#translations">documentation</a>.</p>
<h4 id="translations-cache-options">Translations cache options</h4>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">cache:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">'.cache'</span> <span class="hljs-comment"># cache directory</span>
  <span class="hljs-attr">translations:</span>
    <span class="hljs-attr">dir:</span> <span class="hljs-string">'translations'</span> <span class="hljs-comment"># translations cache directory</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span>       <span class="hljs-comment"># enables translations cache</span></code></pre>
<p>Refer to the <a href="/documentation/configuration/#cache">documentation</a>.</p>
<h4 id="new-command-to-clear-translations-cache">New command to clear translations cache</h4>
<p>Use the following command to remove the translations cache directory:</p>
<pre><code class="language-bash hljs bash">php cecil.phar cache:clear:translations</code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Create a default <code>translator</code> to always support the <code>trans</code> tag or filter, even if there is not translations</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/06/cecil-6.3.0-released/</id>
    <title>Cecil 6.3.0 released</title>
    <published>2022-09-06T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/06/cecil-6.3.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="better-front-matter-variables-handling">Better front matter variables handling</h4>
<p><em>Simple</em> front matter variables (i.e.: title, language, etc.) are stored in a property and <em>complex</em> values (like collections) are stored in a dedicated object attribute.</p>
<p>This has no impact on calls within a template.</p>
<p><em>Example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ page.language }}</span><span class="xml"> # <span class="hljs-tag">&lt;<span class="hljs-name">=</span>&gt;</span> $page-&gt;getVariable('language');
</span><span class="hljs-template-variable">{{ page.pages }}</span><span class="xml"> # <span class="hljs-tag">&lt;<span class="hljs-name">=</span>&gt;</span> $page-&gt;getPages();</span></code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Missing end tag for the main element of the default template fixed (by @<a href="https://github.com/magentix" target="_blank" rel="noopener noreferrer">magentix</a>)</li>
<li><a href="https://github.com/Cecilapp/Cecil/issues/1456" target="_blank" rel="noopener noreferrer">#1456</a> fixed (<code>new:page</code> command)</li>
<li>Menu entry weight is forced to be an integer value</li>
<li><code>new:page</code> filename can now contain several dots in its name</li>
<li>URL of an alias page is now localized</li>
<li>The <code>self-update</code> command works again thanks to <a href="https://github.com/laravel-zero/phar-updater" target="_blank" rel="noopener noreferrer"><em>laravel-zero/phar-updater</em></a> fork</li>
</ul>
<h3 id="documentation">Documentation</h3>
<ul>
<li><em>Content</em> documentation updated</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/06/cecil-6.4.0-released/</id>
    <title>Cecil 6.4.0 released</title>
    <published>2022-09-06T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/06/cecil-6.4.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="i18n-feature-for-home-page">I18n feature for home page</h4>
<p>Pages listed on generated home page are now filtered by language.</p>
<h3 id="fixes">Fixes</h3>
<ul>
<li>"updated" front matter variable should be converted to <code>Datetime</code></li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/09/06/cecil-6.5.0-released/</id>
    <title>Cecil 6.5.0 released</title>
    <published>2022-09-06T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/09/06/cecil-6.5.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="sort-pages-collection-by-updated-date">Sort pages collection by <code>updated</code> date</h4>
<p>When you applied the <code>sort_by_date</code> filter on a pages collection it use the <code>date</code> variable value by default.<br>
You can change this behavior and use <code>updated</code> variable value instead of <code>date</code>:</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ pages|sort_by_date }}</span><span class="xml"> # filter on "date" value
</span><span class="hljs-template-variable">{{ pages|sort_by_date('updated') }}</span><span class="xml"> # filter on "updated" value</span></code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>The default date of a page in now based on file last modified date (PHP <code>getMTime</code>)</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/08/30/cecil-6.2.0-released/</id>
    <title>Cecil 6.2.0 released</title>
    <published>2022-08-30T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/08/30/cecil-6.2.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="localizeddate-fallback">Localizeddate fallback</h4>
<p>Fallback to <code>date()</code> if the <code>localizeddate</code> filter is not available.</p>
<h3 id="fixes">Fixes</h3>
<ul>
<li>An XSL file must be nammed "xsl" not "xslt"</li>
<li>"alt" attribute removed from audio and video tags</li>
<li>Localization of a not found menu entry (404) fixed</li>
<li>Skeleton: example image URL fixed</li>
<li>Fetch site pages (<code>site.pages</code>) in current language</li>
</ul>
<h3 id="documentation">Documentation</h3>
<ul>
<li><em>Quick Start</em> updated</li>
<li><em>Content</em> updated</li>
<li>Language section updated</li>
<li><em>Configuration</em> updated</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Code enhanced</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/08/11/cecil-6.1.0-released/</id>
    <title>Cecil 6.1.0 released</title>
    <published>2022-08-11T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/08/11/cecil-6.1.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="markdown-files-moved-from-content-to-pages">Markdown files moved from <code>content</code> to <code>pages</code></h4>
<p>For a better understanding of the directories structure, pages (Markdown files) should now be placed in the <code>pages</code> directory instead of <code>content</code>.</p>
<p>See <a href="/documentation/content/">documentation</a>.</p>
<h3 id="documentation">Documentation</h3>
<ul>
<li>The <a href="https://cecil.app/documentation/configuration/#generators"><code>generators</code></a> section have been detailed</li>
<li>An example of a <a href="/documentation/configuration/#custom-generator">custom generator</a> have been added</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Tests fixtures cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/08/04/cecil-6.0.0-released/</id>
    <title>Cecil 6.0.0 released</title>
    <published>2022-08-04T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/08/04/cecil-6.0.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="adds-support-of-php-8-1">Adds support of PHP 8.1</h4>
<p>This major release adds support of PHP 8.1+ et drop the support of PHP version prior PHP 7.4.</p>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Default <a href="/documentation/content/#audio-and-video">media</a> (audio and video) attributes have been removed</li>
<li>Dot files (e.g.: <code>.htaccess</code>) in <code>static</code> directory are now copied</li>
<li>The XSLT template (used by RSS and Atom feeds) have been cleaned</li>
<li>An error is now printed if the <code>baseurl</code> config variable is not defined</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/07/04/cecil-5.104.0-released/</id>
    <title>Cecil 5.104.0 released</title>
    <published>2022-07-04T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/07/04/cecil-5.104.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="adds-an-xslt-stylesheet-to-rss-feeds">Adds an XSLT stylesheet to RSS feeds</h4>
<p>See <a href="/news/2022/06/27/cecil-5.103.0-released/">Cecil 5.103.0 released</a>.</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/06/27/cecil-5.103.0-released/</id>
    <title>Cecil 5.103.0 released</title>
    <published>2022-06-27T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/06/27/cecil-5.103.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="adds-an-xslt-stylesheet-to-atom-feeds">Adds an XSLT stylesheet to Atom feeds</h4>
<p><em>Example:</em></p>
<figure>
<picture title="Atom feed example">
<source type="image/avif" srcset="/thumbnails/480x/images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.avif 480w, /images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.avif 663w" width="663" height="392" sizes="100vw">
<source type="image/webp" srcset="/thumbnails/480x/images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.webp 480w, /images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.webp 663w" width="663" height="392" sizes="100vw">
<img src="/images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.png" alt="Atom feed example" loading="lazy" decoding="async" class="dark:brightness-90" width="663" height="392" style=";max-width:100%;height:auto;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAAAyCAYAAACqNX6+AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEy0lEQVR4nO1bWZbjIAwsEd//PHOAucGcp6P5YBMgFuMlttPVLw3GGGwVJUFM6N/fPwwwGAwAeIPwhsEPXnhjcekLP3jhJ5QbMAwAAoEAgsvb1DZFYAYYhDds0Ztj3tWEIcAY4OU+C7k8AS9DLk8wxtUlAsUuY68EgeSgOAxF/iISlWr5WkMjCDfXTxe9sql27s9yXupJYXvIbO+DwdZoDBBxcm0gxOVJ65OB0ChEe3m1WCW5O0oPXeGkYU/AAjJZESGaPRJjS7xRymdMbWRNxojkeXvJawnWNp4U2aP9COOLDtmyC2LXLqGo4ztQii6NBfTKivxYjWn8s6T0CWGwcyfsjMZONUBJiCclEqEZTkhAtEOiXXmRrgzdCFeCQoinwYjUhJwlgzqEWBREZIM9GN+rhHIX5j6BgMQvpd17+fm++2HkkkgIST0vBUKMcCCMlkI4DYRCHT4v+5GEBJXIT6hdKqMKUtRxFzYALGxeVf/jCYGjhQUpKVgNlEERPtArN5CQAiV6sf1X9qkjCEVOlG4EqxAKzy2QxhKfz0d5GMFUuhOu5PNeAEEIpeQU1PvZWydteLdLwyoEsC7FPZAnJ04vPRlx9lQIovLw3DiXX+q9HRWF/X7yPm/IBQAx7a375XLW7w3W9OWy7kg9KtMhYmrnb4qFxTokBOuwaCiWf0mG1JOTUAhJUlmNOumNsYS5TOJ344qr+YDZNHYKI0SQIohK/bvDuSwWqnBnQr5iblKzc0N0YMSPKuTuWGzin8QZnwjEPP6Ug/FEvbSnEMU9PpUMQLisUiKDqM33Bw20NiaE8oyI57isDDFwjz1hsXQZROGSOgrJr9XIkFU3xbUPoiBkLfKZV72CXqwG7w4ZnpFW3bsKJhCySRk5Gk1IAsdJSRts3eGE070UphVSNcqAUpqkNIgY6lKJO3fCsqsycjRcTkkEiWNaRciTsFohwybSKgrXRCEOuMVnRsgMcqXsSehZQ2M5Zb6YuSvyGxUUEr5VGR6bZ1ldFAuJuIjQCNmrS5YHG9umSv4InKMQB79+COpw35UdoYq7amw5Y4qY+nZLS3j1deoS+/pKWc4aSyF2QHqROMc94i7KIH99HKqQug1IS07EdZVyeFCPcYPEpzIrPsh9naqUje0fohBSck9EopSdWD9IIXKvSpxVkdxOooDD6xg5Hd7zrvolu/Uw2fSuCqlshyjhdrhQPLy1luTA2aqUnRRShrlkYSZX4trl+abprK1DlHJoYJlXykaFeCPXelXKM2nIw7tjD6VsUAhlqXc96eiobCSKuSF/dZZS9sZ6pSytjSWj3eVEhJ8JoKGeS0pjnxvaopRNMUQObrlFwqbuBzXqPcxOjJ+vlOkYos2QvCIYCGT0TX85meCTSplWiKYO7Xz7ZwSz32E9VymBkDVKqatDbnykSrz+VUqr/SmF1CZGLYLyK1pH43ieUjYvDPNfjuVbg1etUZrln8R5Smm+D6n9BE2ek1e3FeLrt2PKHJ6jlNUKyYnoK0TpvHZTQ+WfxPFKmX5juFYhteC+LvD3cH+lnBBDYr2wYFTP/SoF2PmdemvlrpW1iQC+USm7v6DSFFInRVurfLdSDtt1khu6/6Xur1KAM3YuDkF7uu9Uymn7ssbx3Ur5D2v0EEguamfzAAAAAElFTkSuQmCC);background-repeat:no-repeat;background-position:center;background-size:cover;" srcset="/thumbnails/480x/images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.png 480w, /images/news/atom-feed-example.2fe534e0f0c0f44a8a1dc013e667b510.png 663w" sizes="100vw">
</picture>
<figcaption>Atom feed example</figcaption>
</figure>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Links in Markdown fixed</li>
<li>Checks if <code>baseurl</code> config variable is empty</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Docs enhanced</li>
<li>Notes (in Markdown) enabled by default</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/06/18/cecil-5.102.0-released/</id>
    <title>Cecil 5.102.0 released</title>
    <published>2022-06-18T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/06/18/cecil-5.102.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="adds-audio-and-video-media-support-in-markdown">Adds audio and video media support in Markdown</h4>
<p><em>Usage example:</em></p>
<p>Use <code>audio</code> keyword in <code>[]</code>:</p>
<pre><code class="language-markdown hljs markdown">![<span class="hljs-string">audio</span>](<span class="hljs-link">/audio/test.mp3 "Audio asset"</span>){controls}</code></pre>
<p>Use <code>video</code> keyword in <code>[]</code>:</p>
<pre><code class="language-markdown hljs markdown">![<span class="hljs-string">video</span>](<span class="hljs-link">/video/test.mp4 "Video asset"</span>){controls poster=/images/cecil-logo.png style="width:100%;"}</code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Do not convert a WebP to WebP…</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>The exception is catched if <code>webp</code> is not installed</li>
<li>Docs fixed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/06/06/cecil-5.101.0-released/</id>
    <title>Cecil 5.101.0 released</title>
    <published>2022-06-06T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/06/06/cecil-5.101.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="code-syntax-highlight-in-markdown">Code syntax highlight in Markdown</h4>
<p>Code syntax highlight is now supported natively in <a href="/documentation/content/#syntax-highlight">Markdown</a>, <em>highlight.js</em> is no more required in template.</p>
<p><em>Example:</em></p>
<pre><code class="language-php hljs php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-comment">// PHP code here</span>
<span class="hljs-keyword">echo</span> <span class="hljs-string">"test"</span>;</code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Serve timeout is now set to 2 x 60 seconds</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/06/05/cecil-5.100.0-released/</id>
    <title>Cecil 5.100.0 released</title>
    <published>2022-06-05T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/06/05/cecil-5.100.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-template-filter-yaml-parse">New template filter: <code>yaml_parse</code></h4>
<p><em>Usage example</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ '**Bold text**'|yaml_parse }}</span></code></pre>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/06/03/cecil-5.99.0-released/</id>
    <title>Cecil 5.99.0 released</title>
    <published>2022-06-03T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/06/03/cecil-5.99.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="get-a-page-in-template">Get a page in template</h4>
<p><em>usage example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ site.page('page-id').title }}</span></code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Asset image with and height fixed</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Code enhanced</li>
<li>i18n code cleaned</li>
<li>Dependencies updated</li>
<li>Better asset handling error message</li>
<li>Markdown (images) fixtures added</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/05/24/cecil-5.98.0-released/</id>
    <title>Cecil 5.98.0 released</title>
    <published>2022-05-24T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/05/24/cecil-5.98.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="exclude-directories-path-or-files-in-content">Exclude directories, path or files in content</h4>
<p><em>Usage example:</em></p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">content:</span>
  <span class="hljs-attr">dir:</span> <span class="hljs-string">content</span>
  <span class="hljs-attr">ext:</span> <span class="hljs-string">[md]</span>
  <span class="hljs-attr">exclude:</span> <span class="hljs-string">[dir1,</span> <span class="hljs-string">'*.ext'</span><span class="hljs-string">]</span> <span class="hljs-comment"># list of excluded files (accepts globs, strings and regexes)</span></code></pre>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Docs updated</li>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/05/08/cecil-5.97.0-released/</id>
    <title>Cecil 5.97.0 released</title>
    <published>2022-05-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/05/08/cecil-5.97.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="inline-insert-markdown">Inline "insert" Markdown</h4>
<p><em>Usage example</em>:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-string">++text++</span></code></pre>
<p>is converted to:</p>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">ins</span>&gt;</span>text<span class="hljs-tag">&lt;/<span class="hljs-name">ins</span>&gt;</span></code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Footnotes are now removed in excerpt</li>
<li>Checks if config file is exists / is defined</li>
<li>Variable <code>$layout</code> might not be defined</li>
<li><code>str_replace</code> PHP function is fixed for PHP 8</li>
<li><code>bindtextdomain</code> is set only if the <code>locale</code> (l10n) exists</li>
<li>Asset images optimization fixed</li>
<li>Extension <code>.ser</code> added to cache files</li>
<li>Assets resize process fixed</li>
<li>Assets are optimized on <code>save()</code></li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Docs charts updated</li>
<li><code>declare(strict_types=1)</code> added to all library files</li>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/05/08/cecil-5.96.0-released/</id>
    <title>Cecil 5.96.0 released</title>
    <published>2022-05-08T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/05/08/cecil-5.96.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="define-responsive-images-widths">Define responsive images widths</h4>
<p>Responsive images widths are now defined by a list:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">responsive:</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span>
      <span class="hljs-attr">widths:</span> <span class="hljs-string">[480,</span> <span class="hljs-number">640</span><span class="hljs-string">,</span> <span class="hljs-number">768</span><span class="hljs-string">,</span> <span class="hljs-number">1024</span><span class="hljs-string">,</span> <span class="hljs-number">1366</span><span class="hljs-string">,</span> <span class="hljs-number">1600</span><span class="hljs-string">,</span> <span class="hljs-number">1920</span><span class="hljs-string">]</span></code></pre>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/04/29/cecil-5.95.0-released/</id>
    <title>Cecil 5.95.0 released</title>
    <published>2022-04-30T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/04/29/cecil-5.95.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="converts-variables-to-boolean">Converts variables to boolean</h4>
<p>Converts variable's value <code>true</code>, <code>false</code>, <code>on</code>, <code>off</code>, <code>yes</code>, <code>no</code> to boolean (true or false).</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/04/29/cecil-5.94.0-released/</id>
    <title>Cecil 5.94.0 released</title>
    <published>2022-04-29T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/04/29/cecil-5.94.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="schedule-pages-publication">Schedule pages publication</h4>
<p>New page's variable: <code>schedule</code>.</p>
<p><em>Usage example:</em></p>
<p>The page will be published if current date is &gt;= 2023-02-07:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">schedule:</span>
  <span class="hljs-attr">publish:</span> <span class="hljs-number">2023</span><span class="hljs-number">-02</span><span class="hljs-number">-07</span></code></pre>
<p>This page is published if current date is &lt;= 2022-04-28:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">schedule:</span>
  <span class="hljs-attr">expiry:</span> <span class="hljs-number">2022</span><span class="hljs-number">-04</span><span class="hljs-number">-28</span></code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>The taxonomies step is runned only if necessary</li>
<li>Set <code>baseline</code> should not be set by default</li>
<li>The time zone is set only if exists in config</li>
<li>Asset must be saved in <code>html</code> filter</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/04/22/cecil-5.93.0-released/</id>
    <title>Cecil 5.93.0 released</title>
    <published>2022-04-22T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/04/22/cecil-5.93.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="new-template-filter-hex-to-rgb">New template filter: <code>hex_to_rgb</code></h4>
<p>The <a href="/documentation/templates/#hex-to-rgb"><code>hex_to_rgb</code> filter</a> converts a hexadecimal color to RGB.</p>
<p><em>Usage example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-variable">{{ '#163C56'|hex_to_rgb }}</span></code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>The asset path can’t be empty</li>
<li>WebP optimization quality fixed: 85 to 75</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Docs updated / fixed</li>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/04/06/cecil-5.92.0-released/</id>
    <title>Cecil 5.92.0 released</title>
    <published>2022-04-06T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/04/06/cecil-5.92.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="asking-for-basic-configuration-when-creating-a-new-site">Asking for basic configuration when creating a new site</h4>
<p><em>Usage example:</em></p>
<pre><code class="language-bash hljs bash">php cecil.phar new:site</code></pre>
<pre><code class="language-plaintext hljs plaintext">Creating a new website...
- title: My website
- baseline (~ 20 characters): The better website in the world
- baseurl (e.g.: https://cecil.local/): https://cecil.app/
- description (~ 250 characters): This is the long description of my website and I love it.
Done!</code></pre>
<h4 id="adds-editor-option-to-new-page-command">Adds <code>editor</code> option to <code>new:page</code> command</h4>
<p><em>Usage example:</em></p>
<pre><code class="language-bash hljs bash">php cecil.phar new:page --editor=typora</code></pre>
<h4 id="adds-editor-option-to-open-command">Adds <code>editor</code> option to <code>open</code> command</h4>
<p><em>Usage example:</em></p>
<pre><code class="language-bash hljs bash">php cecil.phar open --editor=code</code></pre>
<h3 id="浩獣">Misc</h3>
<ul>
<li><code>clean</code> alias command removed</li>
<li>Dependencies updated</li>
<li>Code cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/04/03/cecil-5.91.0-released/</id>
    <title>Cecil 5.91.0 released</title>
    <published>2022-04-03T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/04/03/cecil-5.91.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="adds-support-of-sitenavigationelement-structured-data">Adds support of <code>SiteNavigationElement</code> structured data</h4>
<p>Cecil is able to generate automatically <a href="/documentation/configuration#metatags">metatags</a> for you, useful for SEO and <a href="https://ogp.me/" target="_blank" rel="noopener noreferrer">Open Graph</a>, by including a partial template in HTML <code>&lt;head&gt;</code>:</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">include</span></span> 'partials/metatags.html.twig' %}</span></code></pre>
<p>This template is also able to generate <a href="https://developers.google.com/search/docs/advanced/structured-data/intro-structured-data" target="_blank" rel="noopener noreferrer">structured data</a> (<code>WebSite</code>, <code>BreadcrumbList</code> and <code>NewsArticle</code>)  by enabling the following option in config:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">metatags:</span>
  <span class="hljs-attr">jsonld:</span>
    <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span> </code></pre>
<p>Now it also support <code>SiteNavigationElement</code>, for example:</p>
<pre><code class="language-json hljs json">{
  <span class="hljs-attr">"@context"</span>:<span class="hljs-string">"http://schema.org"</span>,
  <span class="hljs-attr">"@type"</span>:<span class="hljs-string">"ItemList"</span>,
  <span class="hljs-attr">"itemListElement"</span>:[
    {
      <span class="hljs-attr">"@type"</span>: <span class="hljs-string">"SiteNavigationElement"</span>,
      <span class="hljs-attr">"position"</span>: <span class="hljs-number">1</span>,
      <span class="hljs-attr">"name"</span>: <span class="hljs-string">"News"</span>,
      <span class="hljs-attr">"description"</span>: <span class="hljs-string">"News about Cecil."</span>,
      <span class="hljs-attr">"url"</span>:<span class="hljs-string">"https://cecil.app/news/"</span>
    },
    {
      <span class="hljs-attr">"@type"</span>: <span class="hljs-string">"SiteNavigationElement"</span>,
      <span class="hljs-attr">"position"</span>: <span class="hljs-number">2</span>,
      <span class="hljs-attr">"name"</span>: <span class="hljs-string">"Docs"</span>,
      <span class="hljs-attr">"description"</span>: <span class="hljs-string">"Official documentation of Cecil."</span>,
      <span class="hljs-attr">"url"</span>:<span class="hljs-string">"https://cecil.app/documentation/"</span>
    },
    {
      <span class="hljs-attr">"@type"</span>: <span class="hljs-string">"SiteNavigationElement"</span>,
      <span class="hljs-attr">"position"</span>: <span class="hljs-number">3</span>,
      <span class="hljs-attr">"name"</span>: <span class="hljs-string">"Download"</span>,
      <span class="hljs-attr">"description"</span>: <span class="hljs-string">"How to download Cecil."</span>,
      <span class="hljs-attr">"url"</span>:<span class="hljs-string">"https://cecil.app/download/"</span>
    }
  ]
}</code></pre>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Documentation updated / fixed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/04/02/cecil-5.90.0-released/</id>
    <title>Cecil 5.90.0 released</title>
    <published>2022-04-02T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/04/02/cecil-5.90.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="option-to-disable-remote-images-fetching">Option to disable remote images fetching</h4>
<p>Before the 5.90 release, remote (i.e.: external) images used in pages' body (e.g.: <code>![](https://example.com/image.jpg)</code>) were systematically fetched and stored locally, in the <code>_sites/assets/</code> directory.<br>
However, this is not a behavior that Cecil’s users want systematically, that's why we added an option to disable it:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">body:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">remote:</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">false</span></code></pre>
<aside class="note note-info"><p><strong>Info:</strong> If you disable the <em>remote</em> option Cecil can't handle image files (no resize, no optimization, etc.): the URL will be used as is in the <code>&lt;img&gt;</code> tag.</p></aside>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Option to disable auto-generated favicons in the <a href="/documentation/configuration/#metatags-configuration">metatags</a> template is now working</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Better commands description/help</li>
<li>Skeleton website cleaned</li>
<li>HTML meta <code>theme-color</code> added to the default page template</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/03/27/cecil-5.89.0-released/</id>
    <title>Cecil 5.89.0 released</title>
    <published>2022-03-27T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/03/27/cecil-5.89.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="webp-image-optimization">WebP image optimization</h4>
<p><a href="https://developers.google.com/speed/webp" target="_blank" rel="noopener noreferrer">WebP</a> images can be optimized (compressed) in addition to JPEG, PNG, GIF and SVG formats by enabling the following option in config file:</p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">assets:</span>
  <span class="hljs-attr">images:</span>
    <span class="hljs-attr">optimize:</span>
      <span class="hljs-attr">enabled:</span> <span class="hljs-literal">true</span></code></pre>
<p>It works in templates with the <a href="/documentation/templates/#asset"><code>asset()</code> function</a> and in <a href="/documentation/content#body">pages’ body</a> with the image Markdown tag.</p>
<h3 id="fixes">Fixes</h3>
<ul>
<li>A <em>Note</em> must be an <code>aside</code> not a <code>div</code></li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Documentation fixed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/03/25/cecil-5.88.0-released/</id>
    <title>Cecil 5.88.0 released</title>
    <published>2022-03-25T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/03/25/cecil-5.88.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="get-width-and-height-of-a-svg">Get width and height of a SVG</h4>
<p>If you create an <a href="/documentation/templates#asset">asset</a> from a <a href="https://developer.mozilla.org/docs/Web/SVG" target="_blank" rel="noopener noreferrer">SVG</a> file you can now get its width and height.</p>
<p><em>Usage example:</em></p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">set</span></span> image = asset('image.svg') %}</span><span class="xml">
<span class="hljs-tag">&lt;<span class="hljs-name">img</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image|url }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">width</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image.width }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> <span class="hljs-attr">height</span>=<span class="hljs-string">"</span></span></span><span class="hljs-template-variable">{{ image.height }}</span><span class="xml"><span class="hljs-tag"><span class="hljs-string">"</span> /&gt;</span></span></code></pre>
<p>See <a href="/documentation/templates#attributes">Templates &gt; asset &gt; Attributes documentation</a> for details.</p>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Documentation fixed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/03/23/cecil-5.87.0-released/</id>
    <title>Cecil 5.87.0 released</title>
    <published>2022-03-23T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/03/23/cecil-5.87.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="markdown-note-block-level-element">Markdown <em>Note</em> block-level element</h4>
<p>A new Markdown element is available: <strong><em>Note</em></strong>.</p>
<p>It encapsulates a Markdown text (Information, tip, important, etc. What you need) in an <code>&lt;aside&gt;</code> element with a dedicated CSS class, named by the type of the note, i.e. <code>class="note note-&lt;type&gt;"</code>.</p>
<pre><code class="language-markdown hljs markdown">:::tip
<span class="hljs-strong">**Tip:**</span> This is an advice.
:::</code></pre>
<p>Is converted to:</p>
<pre><code class="language-html hljs xml"><span class="hljs-tag">&lt;<span class="hljs-name">aside</span> <span class="hljs-attr">class</span>=<span class="hljs-string">"note note-tip"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">strong</span>&gt;</span>Tip:<span class="hljs-tag">&lt;/<span class="hljs-name">strong</span>&gt;</span> This is an advice.
  <span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">aside</span>&gt;</span></code></pre>
<blockquote>
<p>In the previous example <code>tip</code> is the type of the note.</p>
</blockquote>
<p>Examples in the context of this website:</p>
<aside class="note note-tip"><p><strong>Tip:</strong> This is an advice.</p></aside>
<aside class="note note-info"><p><strong>Info:</strong> This is an information note.</p></aside>
<aside class="note note-important"><p><strong>Important:</strong> This is an important message.</p></aside>
<aside class="note note-not_styled"><p>This is a note.</p></aside>
<h3 id="fixes">Fixes</h3>
<ul>
<li>The <code>--page</code> command option must support subdirectory</li>
<li>Reload browser on first build</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Documentation updated and fixed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/03/18/cecil-5.85.0-released/</id>
    <title>Cecil 5.85.0 released</title>
    <published>2022-03-18T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/03/18/cecil-5.85.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="build-and-serve-a-specific-page">Build and serve a specific page</h4>
<p>Uses the option <code>--page=&lt;file&gt;</code> (alias: <code>-p &lt;file&gt;</code>) with the <code>serve</code> command to build and serve a specific page.</p>
<p>It’s useful to speed up the build when you are working on a specific page.</p>
<p><em>Example:</em></p>
<pre><code class="language-bash hljs bash">cecil serve --page=about.md</code></pre>
<h3 id="fixes">Fixes</h3>
<ul>
<li>Clear cache before build (during init phase)</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Code cleaned</li>
<li>Docs cleaned</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/03/10/cecil-5.84.0-released/</id>
    <title>Cecil 5.84.0 released</title>
    <published>2022-03-10T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/03/10/cecil-5.84.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="open-content-with-the-configured-editor">Open <code>content</code> with the configured editor</h4>
<p>Uses the command option <code>--open</code> (<code>-o</code>) to open the content directory with the configured editor.</p>
<p><em>Example:</em></p>
<pre><code class="language-bash hljs bash">cecil --open</code></pre>
<p>Defines the editor with the key <code>editor</code>.</p>
<p><em>Example:</em></p>
<pre><code class="language-yaml hljs yaml"><span class="hljs-attr">editor:</span> <span class="hljs-string">typora</span></code></pre>
<p><em>Demo:</em></p>
<p><figure>
<video title="Open command demo" autoplay="" loop="" source="/images/news/cecil-open.webm" src="/images/news/cecil-open.bfb972970f75dbfb51d2861f473bff0e.mp4" muted="" playsinline="" style=";max-width:100%;height:auto;background-color:#d8d8d8;">
<figcaption>Open command demo</figcaption>
</figure></p>
<h3 id="fixes">Fixes</h3>
<ul>
<li><code>html</code> filter fixed with image assets</li>
<li><code>new:page</code> command fixed</li>
<li>A message is now printed when a Markdown conversion error occur</li>
<li>Animated GIF are not converted to WebP</li>
<li>The « jsonld » template checks if <code>author</code> exists</li>
</ul>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Dependencies updated</li>
<li>Docs updated / fixed</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/03/04/introducing-the-news-section/</id>
    <title>Introducing the News section</title>
    <published>2022-03-04T00:00:00+00:00</published>
    <updated>2022-03-14T00:00:00+00:00</updated>
    <link href="https://cecil.app/news/2022/03/04/introducing-the-news-section/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<p>Since the creation of Cecil the only way to know about new features and other fixes introduced in a new version was the project's <a href="https://github.com/Cecilapp/Cecil/releases" target="_blank" rel="noopener noreferrer">Releases page on GitHub</a>.</p>
<p>Nevertheless, the information communicated remained very technical and not always detailed (unless you put your nose in the code itself).</p>
<p>Also, we have created the <strong><a href="/news/">News section</a></strong> in order to be able to communicate with users more explicitly on:</p>
<ol>
<li>What are the new features of a major version?</li>
<li>What bugs are fixed in a minor release?</li>
</ol>
<p>We hope you like it 🤵</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/01/22/cecil-5.83.0-released/</id>
    <title>Cecil 5.83.0 released</title>
    <published>2022-01-22T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/01/22/cecil-5.83.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="use-a-custom-image-variable-in-metatags">Use a custom image variable in metatags</h4>
<p>By default the <em><a href="/documentation/configuration#metatags">metatags</a></em> partial template uses the <code>image</code> variable of the current page, or the global <code>site.image</code> if the page doesn’t have an image.</p>
<p>So, if you want to use a custom image variable, you can do it by adding the following code in the template:</p>
<pre><code class="language-twig hljs twig"><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">set</span></span> image = page.other_image_variable %}</span><span class="xml">
</span><span class="hljs-template-tag">{% <span class="hljs-name"><span class="hljs-keyword">include</span></span> 'partials/metatags.html.twig' %}</span></code></pre>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Code cleaned</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/01/13/cecil-5.82.0-released/</id>
    <title>Cecil 5.82.0 released</title>
    <published>2022-01-13T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/01/13/cecil-5.82.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="load-pages-from-a-specific-section-in-homepage">Load pages from a specific section in <code>homepage</code></h4>
<p>By default <code>homepage</code> page type loads all site pages.</p>
<p>With the <code>pagesfrom</code> variable you can specify a section name to load only pages from that section.</p>
<p><a href="/documentation/content/#pagesfrom">See documentation</a> for details.</p>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2022/01/08/cecil-5.81.0-released/</id>
    <title>Cecil 5.81.0 released</title>
    <published>2022-01-08T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2022/01/08/cecil-5.81.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="options-for-excerpt-html-filter">Options for <code>excerpt_html</code> filter</h4>
<p>The <code>excerpt_html</code> filter accepts the 2 following options:</p>
<ul>
<li><code>separator</code>: string to use as separator (<code>excerpt|break</code> by default)</li>
<li><code>capture</code>: string to capture, <code>before</code> (default) or <code>after</code> the separator</li>
</ul>
<p><a href="/documentation/templates/#excerpt-html">See documentation</a> for details.</p>
<h3 id="浩獣">Misc</h3>
<ul>
<li>Error messages updated</li>
<li>Dependencies updated</li>
</ul>]]>
    </content>
  </entry>
  <entry xml:lang="en">
    <id>https://cecil.app/news/2021/12/14/cecil-5.79.0-released/</id>
    <title>Cecil 5.79.0 released</title>
    <published>2021-12-14T00:00:00+00:00</published>
    <link href="https://cecil.app/news/2021/12/14/cecil-5.79.0-released/" rel="alternate" type="text/html" />
    <content type="html">
      <![CDATA[<h3 id="features">Features</h3>
<h4 id="navigation-template">Navigation template</h4>
<p>A default <a href="https://github.com/Cecilapp/Cecil/blob/master/resources/layouts/partials/navigation.html.twig" target="_blank" rel="noopener noreferrer">navigation component template</a> is now available.</p>
<p><a href="/documentation/templates/#component-templates">See documentation</a> for details.</p>]]>
    </content>
  </entry>
</feed>
