|
|
@@ -193,45 +193,42 @@
|
|
|
</ul>
|
|
|
</li>
|
|
|
</ul>
|
|
|
-<p class="caption" role="heading"><span class="caption-text">Built-In Output Modules</span></p>
|
|
|
+<p class="caption" role="heading"><span class="caption-text">Built-In Output Classes</span></p>
|
|
|
<ul>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QREps.html">QREps</a><ul>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#example">Example</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#additional-methods">Additional methods</a></li>
|
|
|
-<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#options-that-affect-this-module">Options that affect this module</a></li>
|
|
|
+<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QREps.html#options-that-affect-this-class">Options that affect this class</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRFpdf.html">QRFpdf</a><ul>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#example">Example</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#additional-methods">Additional methods</a></li>
|
|
|
-<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#options-that-affect-this-module">Options that affect this module</a></li>
|
|
|
+<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRFpdf.html#options-that-affect-this-class">Options that affect this class</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRGdImage.html">QRGdImage</a><ul>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#example">Example</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#additional-methods">Additional methods</a></li>
|
|
|
-<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#options-that-affect-this-module">Options that affect this module</a></li>
|
|
|
+<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRGdImage.html#options-that-affect-this-class">Options that affect this class</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRImagick.html">QRImagick</a><ul>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#example">Example</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#additional-methods">Additional methods</a></li>
|
|
|
-<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#options-that-affect-this-module">Options that affect this module</a></li>
|
|
|
+<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRImagick.html#options-that-affect-this-class">Options that affect this class</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html">QRInterventionImage</a><ul>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#example">Example</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#additional-methods">Additional methods</a></li>
|
|
|
-<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#options-that-affect-this-module">Options that affect this module</a></li>
|
|
|
+<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRInterventionImage.html#options-that-affect-this-class">Options that affect this class</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html">QRMarkupHTML</a><ul>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#example">Example</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#additional-methods">Additional methods</a></li>
|
|
|
-<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#options-that-affect-this-module">Options that affect this module</a><ul>
|
|
|
-<li class="toctree-l3"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#options-that-have-no-effect">Options that have no effect</a></li>
|
|
|
-</ul>
|
|
|
-</li>
|
|
|
+<li class="toctree-l2"><a class="reference internal" href="../Built-In-Output/QRMarkupHTML.html#options-that-affect-this-class">Options that affect this class</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="../Built-In-Output/QRMarkupSVG.html">QRMarkupSVG</a><ul>
|
|
|
@@ -313,8 +310,8 @@
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#contact-information-vcard">Contact information: vCard</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#calendar-events-vcalendar-and-icalendar">Calendar Events: vCalendar and iCalendar</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#credit-transfer">Credit Transfer</a><ul>
|
|
|
-<li class="toctree-l3"><a class="reference internal" href="../Appendix/URI-Content.html#sepa">SEPA</a></li>
|
|
|
-<li class="toctree-l3"><a class="reference internal" href="../Appendix/URI-Content.html#pix">Pix</a></li>
|
|
|
+<li class="toctree-l3"><a class="reference internal" href="../Appendix/URI-Content.html#sepa-european-payments-council">SEPA (European Payments Council)</a></li>
|
|
|
+<li class="toctree-l3"><a class="reference internal" href="../Appendix/URI-Content.html#pix-banco-central-do-brasil">Pix (Banco Central do Brasil)</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="../Appendix/URI-Content.html#see-also">See also</a></li>
|
|
|
@@ -439,37 +436,29 @@ In order to do so, we need to collect the modules per <code class="docutils lite
|
|
|
<span class="p">}</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
-<p>We’ve introduced another method that handles the module rendering, which incooperates handling of the <code class="docutils literal notranslate"><span class="pre">QROptions::$drawLightModules</span></code> setting:</p>
|
|
|
-<div class="highlight-php notranslate"><div class="highlight"><pre><span></span> <span class="k">protected</span> <span class="k">function</span> <span class="nf">module</span><span class="p">(</span><span class="nx">int</span> <span class="nv">$x</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$y</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE</span><span class="p">)</span><span class="o">:</span><span class="nx">string</span><span class="p">{</span>
|
|
|
-
|
|
|
- <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nv">$this</span><span class="o">-></span><span class="na">drawLightModules</span> <span class="o">&&</span> <span class="o">!</span><span class="nv">$this</span><span class="o">-></span><span class="na">matrix</span><span class="o">-></span><span class="na">isDark</span><span class="p">(</span><span class="nv">$M_TYPE</span><span class="p">)){</span>
|
|
|
- <span class="k">return</span> <span class="s1">''</span><span class="p">;</span>
|
|
|
- <span class="p">}</span>
|
|
|
-
|
|
|
- <span class="k">return</span> <span class="nb">sprintf</span><span class="p">(</span><span class="s1">'x: %s, y: %s'</span><span class="p">,</span> <span class="nv">$x</span><span class="p">,</span> <span class="nv">$y</span><span class="p">);</span>
|
|
|
- <span class="p">}</span>
|
|
|
-</pre></div>
|
|
|
-</div>
|
|
|
<p>Speaking of option settings, there’s also <code class="docutils literal notranslate"><span class="pre">QROptions::$connectPaths</span></code> which we haven’t taken care of yet - the good news is that we don’t need to as it is already implemented!
|
|
|
We’ll modify the above <code class="docutils literal notranslate"><span class="pre">dump()</span></code> method to use <code class="docutils literal notranslate"><span class="pre">QROutputAbstract::collectModules()</span></code> instead.</p>
|
|
|
-<p>The module collector accepts a <code class="docutils literal notranslate"><span class="pre">Closure</span></code> as its only parameter, which is called with 4 parameters:</p>
|
|
|
+<p>The module collector calls a method <code class="docutils literal notranslate"><span class="pre">moduleTransform()</span></code> internally, which is called with 4 parameters:</p>
|
|
|
<ul class="simple">
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">$x</span></code> : current column</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">$y</span></code> : current row</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">$M_TYPE</span></code> : field value</p></li>
|
|
|
<li><p><code class="docutils literal notranslate"><span class="pre">$M_TYPE_LAYER</span></code>: (possibly modified) field value that acts as layer id</p></li>
|
|
|
</ul>
|
|
|
-<p>We only need the first 3 parameters, so our closure would look as follows:</p>
|
|
|
-<div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$closure</span> <span class="o">=</span> <span class="nx">fn</span><span class="p">(</span><span class="nx">int</span> <span class="nv">$x</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$y</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE</span><span class="p">)</span><span class="o">:</span><span class="nx">string</span> <span class="o">=></span> <span class="nv">$this</span><span class="o">-></span><span class="na">module</span><span class="p">(</span><span class="nv">$x</span><span class="p">,</span> <span class="nv">$y</span><span class="p">,</span> <span class="nv">$M_TYPE</span><span class="p">);</span>
|
|
|
-</pre></div>
|
|
|
-</div>
|
|
|
-<p>As of PHP 8.1+ we can narrow this down with the <a class="reference external" href="https://www.php.net/manual/en/functions.first_class_callable_syntax.php">first class callable syntax</a>:</p>
|
|
|
-<div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$closure</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">module</span><span class="p">(</span><span class="o">...</span><span class="p">);</span>
|
|
|
+<p>We’## introduce another method that handles the module rendering, which incooperates handling of the <code class="docutils literal notranslate"><span class="pre">QROptions::$drawLightModules</span></code> setting:</p>
|
|
|
+<div class="highlight-php notranslate"><div class="highlight"><pre><span></span> <span class="k">protected</span> <span class="k">function</span> <span class="nf">moduleTransform</span><span class="p">(</span><span class="nx">int</span> <span class="nv">$x</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$y</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE_LAYER</span><span class="p">)</span><span class="o">:</span><span class="nx">string</span><span class="p">{</span>
|
|
|
+
|
|
|
+ <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nv">$this</span><span class="o">-></span><span class="na">drawLightModules</span> <span class="o">&&</span> <span class="o">!</span><span class="nv">$this</span><span class="o">-></span><span class="na">matrix</span><span class="o">-></span><span class="na">isDark</span><span class="p">(</span><span class="nv">$M_TYPE</span><span class="p">)){</span>
|
|
|
+ <span class="k">return</span> <span class="s1">''</span><span class="p">;</span>
|
|
|
+ <span class="p">}</span>
|
|
|
+
|
|
|
+ <span class="k">return</span> <span class="nb">sprintf</span><span class="p">(</span><span class="s1">'x: %s, y: %s'</span><span class="p">,</span> <span class="nv">$x</span><span class="p">,</span> <span class="nv">$y</span><span class="p">);</span>
|
|
|
+ <span class="p">}</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<p>This is our final output method then:</p>
|
|
|
<div class="highlight-php notranslate"><div class="highlight"><pre><span></span> <span class="k">public</span> <span class="k">function</span> <span class="nf">dump</span><span class="p">(</span><span class="nx">string</span> <span class="nv">$file</span> <span class="o">=</span> <span class="k">null</span><span class="p">)</span><span class="o">:</span><span class="nx">string</span><span class="p">{</span>
|
|
|
- <span class="nv">$collections</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">collectModules</span><span class="p">(</span><span class="nv">$this</span><span class="o">-></span><span class="na">module</span><span class="p">(</span><span class="o">...</span><span class="p">));</span>
|
|
|
+ <span class="nv">$collections</span> <span class="o">=</span> <span class="nv">$this</span><span class="o">-></span><span class="na">collectModules</span><span class="p">();</span>
|
|
|
|
|
|
<span class="c1">// build the final output</span>
|
|
|
<span class="nv">$out</span> <span class="o">=</span> <span class="p">[];</span>
|
|
|
@@ -490,8 +479,7 @@ We’ll modify the above <code class="docutils literal notranslate"><span class=
|
|
|
<section id="run-the-custom-output">
|
|
|
<h2>Run the custom output<a class="headerlink" href="#run-the-custom-output" title="Link to this heading"></a></h2>
|
|
|
<p>To run the output we just need to set the <code class="docutils literal notranslate"><span class="pre">QROptions::$outputInterface</span></code> to our custom class:</p>
|
|
|
-<div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$options</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">QROptions</span><span class="p">;</span>
|
|
|
-<span class="nv">$options</span><span class="o">-></span><span class="na">outputType</span> <span class="o">=</span> <span class="nx">QROutputInterface</span><span class="o">::</span><span class="na">CUSTOM</span><span class="p">;</span>
|
|
|
+<div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$options</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">QROptions</span><span class="p">;</span>
|
|
|
<span class="nv">$options</span><span class="o">-></span><span class="na">outputInterface</span> <span class="o">=</span> <span class="nx">MyCustomOutput</span><span class="o">::</span><span class="na">class</span><span class="p">;</span>
|
|
|
<span class="nv">$options</span><span class="o">-></span><span class="na">connectPaths</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
|
|
|
<span class="nv">$options</span><span class="o">-></span><span class="na">drawLightModules</span> <span class="o">=</span> <span class="k">true</span><span class="p">;</span>
|
|
|
@@ -508,6 +496,16 @@ We’ll modify the above <code class="docutils literal notranslate"><span class=
|
|
|
<span class="nb">var_dump</span><span class="p">(</span><span class="nv">$qrcode</span><span class="o">-></span><span class="na">render</span><span class="p">());</span>
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
+<p>Alternatively, you can invoke the <code class="docutils literal notranslate"><span class="pre">QROutputInterface</span></code> manually:</p>
|
|
|
+<div class="highlight-php notranslate"><div class="highlight"><pre><span></span><span class="nv">$qrcode</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">QRCode</span><span class="p">(</span><span class="nv">$options</span><span class="p">);</span>
|
|
|
+<span class="nv">$qrOutputInterface</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">MyCustomOutput</span><span class="p">(</span><span class="nv">$options</span><span class="p">,</span> <span class="nv">$qrcode</span><span class="o">-></span><span class="na">getMatrix</span><span class="p">(</span><span class="nv">$data</span><span class="p">));</span>
|
|
|
+
|
|
|
+<span class="c1">//dump the output, which is equivalent to QRCode::render()</span>
|
|
|
+<span class="nv">$qrOutputInterface</span><span class="o">-></span><span class="na">dump</span><span class="p">();</span>
|
|
|
+<span class="c1">// render to file</span>
|
|
|
+<span class="nv">$qrOutputInterface</span><span class="o">-></span><span class="na">dump</span><span class="p">(</span><span class="s1">'/path/to/qrcode.svg'</span><span class="p">);</span>
|
|
|
+</pre></div>
|
|
|
+</div>
|
|
|
<p>The output looks similar to the following:</p>
|
|
|
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>these-modules-are-light (000000000010)
|
|
|
|
|
|
@@ -561,7 +559,7 @@ x: 6, y: 4
|
|
|
<span class="k">return</span> <span class="nb">implode</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="nv">$out</span><span class="p">);</span>
|
|
|
<span class="p">}</span>
|
|
|
|
|
|
- <span class="k">protected</span> <span class="k">function</span> <span class="nf">module</span><span class="p">(</span><span class="nx">int</span> <span class="nv">$x</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$y</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE</span><span class="p">)</span><span class="o">:</span><span class="nx">string</span><span class="p">{</span>
|
|
|
+ <span class="k">protected</span> <span class="k">function</span> <span class="nf">moduleTransform</span><span class="p">(</span><span class="nx">int</span> <span class="nv">$x</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$y</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE</span><span class="p">,</span> <span class="nx">int</span> <span class="nv">$M_TYPE_LAYER</span><span class="p">)</span><span class="o">:</span><span class="nx">string</span><span class="p">{</span>
|
|
|
|
|
|
<span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nv">$this</span><span class="o">-></span><span class="na">drawLightModules</span> <span class="o">&&</span> <span class="o">!</span><span class="nv">$this</span><span class="o">-></span><span class="na">matrix</span><span class="o">-></span><span class="na">isDark</span><span class="p">(</span><span class="nv">$M_TYPE</span><span class="p">)){</span>
|
|
|
<span class="k">return</span> <span class="s1">''</span><span class="p">;</span>
|