diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/METADATA b/METADATA new file mode 100644 index 00000000..223aa001 --- /dev/null +++ b/METADATA @@ -0,0 +1,2 @@ +languages: bash, css, json, lisp, markdown, plaintext, xml, yaml +theme: atom-one-dark diff --git a/changelog.xml b/changelog.xml new file mode 100644 index 00000000..80927be2 --- /dev/null +++ b/changelog.xml @@ -0,0 +1,248 @@ + + + + 40ants-doc-full ChangeLog + https://40ants.com/doc + xml-emitter + en-us + + 0.17.4 (2024-05-15) + <ul><li><p>Update 5</p></li></ul> + Wed, 15 May 2024 00:00:00 +0000 + + + 0.17.3 (2024-05-15) + <ul><li><p>Update 2</p></li></ul> + Wed, 15 May 2024 00:00:00 +0000 + + + 0.17.2 (2024-05-15) + <ul><li><p>Another update.</p></li></ul> + Wed, 15 May 2024 00:00:00 +0000 + + + 0.17.1 (2024-05-15) + <ul><li><p>Just a check if tag will be added automatically.</p></li></ul> + Wed, 15 May 2024 00:00:00 +0000 + + + 0.17.0 (2024-05-13) + <h1 id="backward-incompatible">Backward incompatible</h1><ul><li><p>A plugin system was introduced.</p></li><li><p>Highlight.js and MathJax support were refactored into plugins and MathJax is turned off by default, + because it's assets too heavy and math is unnecessary in most Common Lisp libraries.</p></li><li><p>Generic-function <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-LANGUAGES-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-LANGUAGES-20GENERIC-FUNCTION-29"><code>40ants-doc-full/themes/api:highlight-languages</code></a> and generic-function <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-THEME-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-THEME-20GENERIC-FUNCTION-29"><code>40ants-doc-full/themes/api:highlight-theme</code></a> + are now deprecated. Pass options <code>:LANGUAGES</code> and <code>:THEME</code> arguments to <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FPLUGINS-2FHIGHLIGHTJS-3AHIGHLIGHTJS-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FPLUGINS-2FHIGHLIGHTJS-3AHIGHLIGHTJS-20FUNCTION-29"><code>40ants-doc-full/plugins/highlightjs:highlightjs</code></a> function + instead.</p></li></ul> + Mon, 13 May 2024 00:00:00 +0000 + + + 0.16.0 (2024-05-04) + <ul><li><p>A generic-function <a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FASDF-SYSTEM-3AASDF-SYSTEM-DOCUMENTATION-TITLE-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FLOCATIVES-2FASDF-SYSTEM-3AASDF-SYSTEM-DOCUMENTATION-TITLE-20GENERIC-FUNCTION-29"><code>40ants-doc/locatives/asdf-system:asdf-system-documentation-title</code></a> was added. It allows to override the text of a section showing an information about <code>ASDF</code> system.</p></li></ul> + Sat, 04 May 2024 00:00:00 +0000 + + + 0.15.4 (2024-01-26) + <ul><li><p>Another fix to <code>URL</code>s on the search page. Now if <code>CLEAN-URLS</code> argument is true, search page will link to the pages ended with a backslash. Otherwise, it will link to the html pages.</p></li></ul> + Fri, 26 Jan 2024 00:00:00 +0000 + + + 0.15.3 (2024-01-24) + <ul><li><p>Fixed <code>URL</code>s in the search index file when <code>CLEAN-URLS</code> argument is given. This should prevent redirection to index.html file from search page - now index.html will be stripped from the path.</p></li></ul> + Wed, 24 Jan 2024 00:00:00 +0000 + + + 0.15.2 (2023-11-28) + <ul><li><p>Fixed stack exhausting when trying to collect dependencies for some <code>ASDF</code> systems.</p></li></ul> + Tue, 28 Nov 2023 00:00:00 +0000 + + + 0.15.1 (2023-08-05) + <ul><li><p>Fixed issue with unpacking Highlight.js archive when it is having absolute pathnames.</p></li></ul><p>Also, a new download <code>API</code> is used now.</p> + Sat, 05 Aug 2023 00:00:00 +0000 + + + 0.15.0 (2023-07-22) + <ul><li><p>Autodoc was fixed to not show packages without external symbols.</p></li><li><p>Also, now autodoc sorts packages alphabetically.</p></li></ul> + Sat, 22 Jul 2023 00:00:00 +0000 + + + 0.14.0 (2023-06-04) + <ul><li><p>Added <a href="https://40ants.com/doc/#x-2840ANTS-DOC-3A-2ASYMBOLS-WITH-IGNORED-MISSING-LOCATIONS-2A-20-28VARIABLE-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3A-2ASYMBOLS-WITH-IGNORED-MISSING-LOCATIONS-2A-20-28VARIABLE-29-29"><code>40ants-doc:*symbols-with-ignored-missing-locations*</code></a> variable to ignore warnings on missing source location.</p></li></ul><p>This might be useful for autogenerated methods. For example, Mito does generate such reader methods +<a href="https://github.com/fukamachi/mito/blob/6835d2c8120454e93c69d4f22cccb10d9ee24526/src/core/dao/mixin.lisp#L71">here</a>.</p> + Sun, 04 Jun 2023 00:00:00 +0000 + + + 0.13.0 (2023-06-04) + <ul><li><p>Support for variables was added to autodoc subsystem.</p></li></ul> + Sun, 04 Jun 2023 00:00:00 +0000 + + + 0.12.0 (2023-04-22) + <ul><li><p>Autodoc subsystem was added. It provides a <a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FAUTODOC-3ADEFAUTODOC-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FAUTODOC-3ADEFAUTODOC-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc/autodoc:defautodoc</code></a> macro which can build an <code>API</code> reference for a given <code>ASDF</code> system.</p></li><li><p>Now we output a list of dependencies for an <code>ASDF</code> system description.</p></li></ul> + Sat, 22 Apr 2023 00:00:00 +0000 + + + 0.11.2 (2022-12-05) + <ul><li><p>Script on the search page was fixed.</p></li></ul> + Mon, 05 Dec 2022 00:00:00 +0000 + + + 0.11.1 (2022-11-26) + <ul><li><p>Fixed <a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-TYPE-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-TYPE-20GENERIC-FUNCTION-29"><code>40ants-doc/locatives/base:locative-type</code></a> broken by previous refactoring. Now this function +was transformed into generic-function as well as <a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-ARGS-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-ARGS-20GENERIC-FUNCTION-29"><code>40ants-doc/locatives/base:locative-args</code></a>.</p></li></ul> + Sat, 26 Nov 2022 00:00:00 +0000 + + + 0.11.0 (2022-11-16) + <ul><li><p>Large refactoring was introduced. All files related to the documentation builder were moved to <code>./full/</code> folder and corresponding packages was renamed to have <code>40ants-doc-full/</code> prefix.</p></li></ul> + Wed, 16 Nov 2022 00:00:00 +0000 + + + 0.10.0 (2022-11-09) + <ul><li><p>Default theme was reworked and now uses divs and flex for rendering &quot;bullets&quot;. +Also, bullets were made more structured and now it is more convenient to change their design using <code>CSS</code>.</p></li></ul> + Wed, 09 Nov 2022 00:00:00 +0000 + + + 0.9.2 (2022-10-26) + <ul><li><p>Fixed a few issues with <code>ASDF</code> and warnings from find-system generic-function:</p></li></ul><pre><code class="">Computing just-done stamp for action (ASDF/LISP-ACTION:COMPILE-OP + &quot;40ants-asdf-system/changelog&quot;), but dependency (ASDF/LISP-ACTION:COMPILE-OP + &quot;40ants-asdf-system/changelog&quot; + &quot;file-type&quot;) wasn't done yet!</code></pre> + Wed, 26 Oct 2022 00:00:00 +0000 + + + 0.9.1 (2022-10-19) + <ul><li><p>Fixed 40ants-doc asdf system dependency from the 40ants-doc/ignored-words. Because this module should be in the core system.</p></li></ul> + Wed, 19 Oct 2022 00:00:00 +0000 + + + 0.9.0 (2022-02-21) + <ul><li><p>Now you can refer internal documentation section of other libraries. +To do this, put the link to this library documentation to the +<code>EXTERNAL-DOCS</code> argument of <a href="https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc:defsection</code></a> macro and then +mention other section like this: <code>40ANTS-CI::@CRITIC section</code>.</p></li></ul> + Mon, 21 Feb 2022 00:00:00 +0000 + + + 0.8.0 (2022-02-14) + <ul><li><p>Now <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3AMAP-NODES-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3AMAP-NODES-20GENERIC-FUNCTION-29"><code>40ants-doc-full/commondoc/mapper:map-nodes</code></a> generic-function + supports any node type which defines a method for + generic-function <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3ANODE-SUPPORTS-CHILDREN-20GENERIC-FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3ANODE-SUPPORTS-CHILDREN-20GENERIC-FUNCTION-29"><code>40ants-doc-full/commondoc/mapper:node-supports-children</code></a>.</p></li><li><p>Default theme was fixed to work with latest Spinneret, which now + escapes single quotes inside <code>HTML</code> nodes.</p></li></ul> + Mon, 14 Feb 2022 00:00:00 +0000 + + + 0.7.0 (2021-12-31) + <ul><li><p><a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FCHANGELOG-3ADEFCHANGELOG-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FCHANGELOG-3ADEFCHANGELOG-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants/changelog:defchangelog</code></a> now supports <code>EXTERNAL-LINKS</code> argument.</p></li><li><p>Automatic symbol extraction now ignores dates like 2021-12-31. Now + to make it work, the symbol should contain at least one alpha character.</p></li></ul> + Fri, 31 Dec 2021 00:00:00 +0000 + + + 0.6.0 (2021-12-05) + <ul><li><p>Fixed the issue, when we tried to find uppercased xrefs inside inline code and links.</p></li><li><p>Added <code>EXTERNAL-LINKS</code> argument to <a href="https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>defsection</code></a> macro. It can be useful, if you have a multiple + text sections having the same external link.</p></li><li><p>Now it is possible to use <a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FIGNORED-WORDS-3AIGNORE-WORDS-IN-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FIGNORED-WORDS-3AIGNORE-WORDS-IN-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc/ignored-words:ignore-words-in-package</code></a> + to suppress warning on symbols which are exported but not documented.</p></li></ul> + Sun, 05 Dec 2021 00:00:00 +0000 + + + 0.5.8 (2021-10-23) + <ul><li><p>Fixed the way of how a <code>TOC</code> is built. Previosly it incorrectly shown nested <code>COMMONDOC:SECTION</code> objects.</p></li></ul> + Sat, 23 Oct 2021 00:00:00 +0000 + + + 0.5.7 (2021-10-21) + <ul><li><p><a href="https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>defsection</code></a> macro now supports <code>EXTERNAL-DOCS</code> argument.</p></li></ul> + Thu, 21 Oct 2021 00:00:00 +0000 + + + 0.5.6 (2021-10-21) + <ul><li><p>Blockquotes markup is supported now.</p></li><li><p>Now external references are rendered as code and downcased according to the settings.</p></li></ul> + Thu, 21 Oct 2021 00:00:00 +0000 + + + 0.5.5 (2021-09-26) + <p>Warning messages like:</p><pre><code class="">Unable to find target for reference #&lt;XREF 40ANTS-DOC/COMMONDOC/XREF:XREF&gt; mentioned at ChangeLog / 0.5.3 (2021-09-08)</code></pre><p>were rewritten to be more actionable:</p><pre><code class="">Object referenced as #&lt;XREF 40ANTS-DOC/COMMONDOC/XREF:XREF&gt; in ChangeLog / 0.5.3 (2021-09-08) is not documented.</code></pre> + Sun, 26 Sep 2021 00:00:00 +0000 + + + 0.5.4 (2021-09-11) + <ul><li><p>Included changelog.lisp into the <a href="https://40ants.com/doc/#x-28-23A-28-2810-29-20BASE-CHAR-20-2E-20-2240ants-doc-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29" data-document="https://40ants.com/doc/" data-node="x-28-23A-28-2810-29-20BASE-CHAR-20-2E-20-2240ants-doc-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29"><code>40ants-doc</code></a> system.</p></li></ul> + Sat, 11 Sep 2021 00:00:00 +0000 + + + 0.5.3 (2021-09-08) + <ul><li><p>Fixed locatives parsing in case if there are more than one <code>40ANTS-DOC/COMMONDOC/XREF:XREF</code> in the text.</p></li></ul> + Wed, 08 Sep 2021 00:00:00 +0000 + + + 0.5.2 (2021-09-08) + <ul><li><p>Now default theme removes underline from images nested into the <code>&lt;a&gt;</code> <code>HTML</code> tag.</p></li><li><p>Fixed images collection for case when current directory is different from the + <code>ASDF</code> system's directory.</p></li></ul> + Wed, 08 Sep 2021 00:00:00 +0000 + + + 0.5.1 (2021-09-07) + <ul><li><p>Fixed reference index generation and comparison of usual references with references where locative is a string.</p></li></ul> + Tue, 07 Sep 2021 00:00:00 +0000 + + + 0.5.0 (2021-09-06) + <ul><li><p>Now <a href="https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc:defsection</code></a> macro accepts <code>EXTERNAL-DOCS</code> argument. +Together with <code>HTML</code> pages, <code>references.json</code> file is rendered, and you can +provide a list of urls of external libraries' documentation to have an automatic +cross-referencing between them.</p></li></ul> + Mon, 06 Sep 2021 00:00:00 +0000 + + + 0.4.1 (2021-09-05) + <ul><li><p>Function <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3AGET-CURRENT-ASDF-SYSTEM-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FBUILDER-3AGET-CURRENT-ASDF-SYSTEM-20FUNCTION-29"><code>40ants-doc-full/builder:get-current-asdf-system</code></a> was added. Now you can use it to do something interesting + like showing &quot;Fork me on the GitHub&quot; stripe <a href="https://github.com/40ants/40ants-doc-theme-40ants/commit/917a4c1e72b0379f509bdee4864531e641c9ec4e#diff-47d16baea2d4ef710747f19c24df8cf7ef4f6bbbfd1dbb0ade55f47457b1e8feR155-R161">as my own theme do</a>.</p></li><li><p>Markdown files now will have a footer saying that a file was generated by <a href="https://40ants.com/doc/#x-28-23A-28-2810-29-20BASE-CHAR-20-2E-20-2240ants-doc-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29" data-document="https://40ants.com/doc/" data-node="x-28-23A-28-2810-29-20BASE-CHAR-20-2E-20-2240ants-doc-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29"><code>40ants-doc</code></a>.</p></li><li><p>An <code>RSS</code> feed is generated for changelog. Also, changelog items can have a date now.</p></li></ul> + Sun, 05 Sep 2021 00:00:00 +0000 + + + 0.4.0 (2021-09-05) + <ul><li><p><code>*DOCUMENT-NORMALIZE-PACKAGES*</code> variable was replaced with <code>FULL-PACKAGE-NAMES</code> argument +of <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-FILES-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-FILES-20FUNCTION-29"><code>40ants-doc-full/builder:render-to-files</code></a> function.</p></li></ul> + Sun, 05 Sep 2021 00:00:00 +0000 + + + 0.3.0 (2021-09-04) + <ul><li><p>Now images are copied to target folder together with <code>HTML</code> documentation + and links are adjusted accordingly.</p></li><li><p>Added a protocol to define new color themes and change page layout. + Three new themes are available out of the box. + Read more at <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FDOCS-3A-3A-40DEFINING-A-THEME-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FTHEMES-2FDOCS-3A-3A-40DEFINING-A-THEME-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"><code>Defining a Custom Theme</code></a> section.</p></li></ul> + Sat, 04 Sep 2021 00:00:00 +0000 + + + 0.2.0 (2021-09-01) + <ul><li><p>Now defsection does not exports symbols by default</p></li><li><p>You can render documents in multiple formats in a single run having cross links. + For example shorter <code>README</code>.md could mention symbols and have correct + links to the full documentation</p></li><li><p>&quot;Clean&quot; <code>URL</code>s are supported out of the box.</p></li><li><p>Now defsection does not export nor mentioned symbols nor the name of the section + It is better to have explicit exports.</p></li><li><p><a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AINCLUDE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FLOCATIVES-3AINCLUDE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"><code>40ants-doc/locatives:include</code></a> locative now does not support <code>:HEADER</code>, <code>:FOOTER</code> and some other arguments. Use <code>:LANG</code> argument instead.</p></li><li><p>Added code highlighting using Highlight.js library.</p></li><li><p>Added search form which uses index in browser. <code>JS</code> code was taken from + <a href="https://www.sphinx-doc.org/">Sphinx</a> documentation builder.</p></li><li><p>Elisp code for transcriptions was fixed and now should word not + only with <code>SLIME</code>, but also with <code>SLY</code>.</p></li><li><p><a href="https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc:defsection</code></a> macro now does not generate export code + if <code>:EXPORT</code> argument is <code>NIL</code>.</p></li><li><p>Functions <code>UPDATE-ASDF-SYSTEM-HTML-DOCS</code> and <code>UPDATE-ASDF-SYSTEM-README</code> + were replaced with <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29"><code>40ants-doc-full/builder:update-asdf-system-docs</code></a>, which also supports + ChangeLog.md generation. Use <a href="https://40ants.com/doc/#x-2840ANTS-DOC-2FCHANGELOG-3ADEFCHANGELOG-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-2FCHANGELOG-3ADEFCHANGELOG-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc/changelog:defchangelog</code></a> to define versions.</p></li><li><p>Variables <code>*DOCUMENT-HTML-MAX-NAVIGATION-TABLE-OF-CONTENTS-LEVEL*</code> and + <code>*DOCUMENT-MAX-TABLE-OF-CONTENTS-LEVEL*</code> were removed. Probably we'll return this + feature back in other form, to restrict <code>TOC</code>'s size.</p></li><li><p>Removed <code>LOCATE-AND-DOCUMENT</code> generic function.</p></li><li><p>Links to the GitHub now are generated automatically, + if <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29"><code>40ants-doc-full/builder:update-asdf-system-docs</code></a> function is used + and system definition has a <code>:SOURCE-CONTROL</code> slot.</p></li><li><p>Generic functions <code>COLLECT-REACHABLE-OBJECTS</code> and <code>LOCATE-AND-COLLECT-REACHABLE-OBJECTS</code> + were removed.</p></li><li><p>Variables <code>*DOCUMENT-LINK-SECTIONS*</code>, <code>*DOCUMENT-TEXT-NAVIGATION*</code> and <code>*DOCUMENT-FANCY-HTML-NAVIGATION*</code> were removed.</p></li><li><p>Variable <code>*DOCUMENT-MIN-LINK-HASH-LENGTH*</code> was removed. Use <code>COMMONDOC-MARKDOWN:*MIN-LINK-HASH-LENGTH*</code></p></li><li><p>Functions <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29"><code>40ants-doc-full/builder:update-asdf-system-docs</code></a> and <a href="https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-FILES-20FUNCTION-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-FILES-20FUNCTION-29"><code>40ants-doc-full/builder:render-to-files</code></a> + now accept <code>WARN-ON-UNDOCUMENTED-PACKAGES</code> argument and <code>CLEAN-URLS</code> argument.</p></li><li><p>Variable <code>*DOCUMENT-MARK-UP-SIGNATURES*</code> was removed.</p></li><li><p>Added <code>DOWNCASE-UPPERCASE-CODE</code> argument instead of <code>*DOCUMENT-DOWNCASE-UPPERCASE-CODE*</code>. + This argument is true by default.</p></li><li><p>Added warnings on symbols, referenced like internals, using <code>::</code>.</p></li><li><p>Added <a href="https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-COPY-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29" data-document="https://40ants.com/doc/" data-node="x-2840ANTS-DOC-3ADEFSECTION-COPY-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"><code>40ants-doc:defsection-copy</code></a> macro to define copy of the section but with a different name.</p></li></ul> + Wed, 01 Sep 2021 00:00:00 +0000 + + + 0.1.0 (2021-05-01) + <ul><li><p>Project forked from <a href="https://github.com/melisgl/mgl-pax">MGL-PAX</a>. + Code refactored into the package inferred system and core is separated + to have minimum dependencies.</p></li><li><p>Fixed displaying docstring for constant locative.</p></li><li><p>Include locative was fixed for files with unicode characters + file-subseq function was rewritten.</p></li><li><p>Locatives can be specified without a package prefix inside the defsection + because all locative symbols now live in <a href="https://40ants.com/doc/#x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-2240ANTS-DOC-2FLOCATIVES-22-29-20PACKAGE-29" data-document="https://40ants.com/doc/" data-node="x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-2240ANTS-DOC-2FLOCATIVES-22-29-20PACKAGE-29"><code>40ants-doc/locatives</code></a> package.</p></li><li><p>Function update-asdf-system-readmes was renamed to update-asdf-system-readmes and now + it generates only one <code>README</code> file.</p></li><li><p>Tests were rewritten to use Rove and to support <code>(asdf:test-system :40ants-doc)</code>.</p></li><li><p>Removed <code>MGL-PAX:DEFINE-PACKAGE</code> macro. An <code>UIOP:DEFINE-PACKAGE</code> can be used instead.</p></li><li><p>Now builder issues a warning if it wasn't able to find a symbol mentioned in the docstring.</p></li><li><p>Uppercase word should have at least two charaters to be resolved as a symbol.</p></li><li><p>Improved work with package inferred systems. For examples, when fixed the + automatic symbol rendering for case when documentation section and + referenced objects are in different packages.</p></li><li><p>Allowed to reference objects using keywords.</p></li><li><p>Fixed docstring extraction for compiler macro.</p></li></ul> + Sat, 01 May 2021 00:00:00 +0000 + + + \ No newline at end of file diff --git a/changelog/index.html b/changelog/index.html new file mode 100644 index 00000000..d281ebb0 --- /dev/null +++ b/changelog/index.html @@ -0,0 +1,268 @@ + + + + ChangeLog + + + + + + + + + + + + + + + + + + + +
Fork me on GitHub + + +

ChangeLog

0.17.4 (2024-05-15)

0.17.3 (2024-05-15)

0.17.2 (2024-05-15)

0.17.1 (2024-05-15)

0.17.0 (2024-05-13)

Backward incompatible

0.16.0 (2024-05-04)

0.15.4 (2024-01-26)

0.15.3 (2024-01-24)

0.15.2 (2023-11-28)

0.15.1 (2023-08-05)

Also, a new download API is used now.

0.15.0 (2023-07-22)

0.14.0 (2023-06-04)

This might be useful for autogenerated methods. For example, Mito does generate such reader methods +here.

0.13.0 (2023-06-04)

0.12.0 (2023-04-22)

0.11.2 (2022-12-05)

0.11.1 (2022-11-26)

0.11.0 (2022-11-16)

0.10.0 (2022-11-09)

0.9.2 (2022-10-26)

Computing just-done stamp  for action (ASDF/LISP-ACTION:COMPILE-OP
+  "40ants-asdf-system/changelog"), but dependency (ASDF/LISP-ACTION:COMPILE-OP
+  "40ants-asdf-system/changelog"
+  "file-type") wasn't done yet!

0.9.1 (2022-10-19)

0.9.0 (2022-02-21)

0.8.0 (2022-02-14)

0.7.0 (2021-12-31)

0.6.0 (2021-12-05)

0.5.8 (2021-10-23)

0.5.7 (2021-10-21)

0.5.6 (2021-10-21)

0.5.5 (2021-09-26)

Warning messages like:

Unable to find target for reference #<XREF 40ANTS-DOC/COMMONDOC/XREF:XREF> mentioned at ChangeLog / 0.5.3  (2021-09-08)

were rewritten to be more actionable:

Object referenced as #<XREF 40ANTS-DOC/COMMONDOC/XREF:XREF> in ChangeLog / 0.5.3  (2021-09-08) is not documented.

0.5.4 (2021-09-11)

0.5.3 (2021-09-08)

0.5.2 (2021-09-08)

0.5.1 (2021-09-07)

0.5.0 (2021-09-06)

0.4.1 (2021-09-05)

0.4.0 (2021-09-05)

0.3.0 (2021-09-04)

0.2.0 (2021-09-01)

0.1.0 (2021-05-01)

+ + + +
+
+ + \ No newline at end of file diff --git a/doctools.js b/doctools.js new file mode 100644 index 00000000..8cbf1b16 --- /dev/null +++ b/doctools.js @@ -0,0 +1,323 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box, textarea, dropdown or button + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey + && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + break; + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + break; + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/highlight.min.css b/highlight.min.css new file mode 100644 index 00000000..5344ee38 --- /dev/null +++ b/highlight.min.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/highlight.min.js b/highlight.min.js new file mode 100644 index 00000000..79e28648 --- /dev/null +++ b/highlight.min.js @@ -0,0 +1,468 @@ +/*! + Highlight.js v11.10.0 (git: 366a8bd012) + (c) 2006-2024 Josh Goebel and other contributors + License: BSD-3-Clause + */ +var hljs=function(){"use strict";function e(t){ +return t instanceof Map?t.clear=t.delete=t.set=()=>{ +throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{ +throw Error("set is read-only") +}),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{ +const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i) +})),t}class t{constructor(e){ +void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1} +ignoreMatch(){this.isMatchIgnored=!0}}function n(e){ +return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'") +}function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t] +;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope +;class o{constructor(e,t){ +this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){ +this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{ +if(e.startsWith("language:"))return e.replace("language:","language-") +;if(e.includes(".")){const n=e.split(".") +;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ") +}return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)} +closeNode(e){s(e)&&(this.buffer+="")}value(){return this.buffer}span(e){ +this.buffer+=``}}const r=(e={})=>{const t={children:[]} +;return Object.assign(t,e),t};class a{constructor(){ +this.rootNode=r(),this.stack=[this.rootNode]}get top(){ +return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){ +this.top.children.push(e)}openNode(e){const t=r({scope:e}) +;this.add(t),this.stack.push(t)}closeNode(){ +if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){ +for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)} +walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){ +return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t), +t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){ +"string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{ +a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e} +addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){ +this.closeNode()}__addSublanguage(e,t){const n=e.root +;t&&(n.scope="language:"+t),this.add(n)}toHTML(){ +return new o(this,this.options).value()}finalize(){ +return this.closeAllNodes(),!0}}function l(e){ +return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")} +function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")} +function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{ +const t=e[e.length-1] +;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{} +})(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"} +function p(e){return RegExp(e.toString()+"|").exec("").length-1} +const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./ +;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n +;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break} +s+=i.substring(0,e.index), +i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0], +"("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)} +const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={ +begin:"\\\\[\\s\\S]",relevance:0},v={scope:"string",begin:"'",end:"'", +illegal:"\\n",contains:[O]},k={scope:"string",begin:'"',end:'"',illegal:"\\n", +contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t, +contains:[]},n);s.contains.push({scope:"doctag", +begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", +end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0}) +;const o=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/) +;return s.contains.push({begin:h(/[ ]+/,"(",o,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s +},S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var j=Object.freeze({ +__proto__:null,APOS_STRING_MODE:v,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{ +scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N, +C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number", +begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{ +"on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{ +t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E, +MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0}, +NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w, +PHRASAL_WORDS_MODE:{ +begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ +},QUOTE_STRING_MODE:k,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/, +end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]}, +RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", +SHEBANG:(e={})=>{const t=/^#![ ]*\// +;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t, +end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)}, +TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x, +UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function A(e,t){ +"."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){ +void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){ +t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)", +e.__beforeBegin=A,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords, +void 0===e.relevance&&(e.relevance=0))}function L(e,t){ +Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){ +if(e.match){ +if(e.begin||e.end)throw Error("begin & end are not supported with match") +;e.begin=e.match,delete e.match}}function P(e,t){ +void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return +;if(e.starts)throw Error("beforeMatch cannot be used with starts") +;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t] +})),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={ +relevance:0,contains:[Object.assign(n,{endsParent:!0})] +},e.relevance=0,delete n.beforeMatch +},H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword" +;function $(e,t,n=C){const i=Object.create(null) +;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{ +Object.assign(i,$(e[n],t,n))})),i;function s(e,n){ +t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|") +;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){ +return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{ +console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{ +z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0) +},K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],o={},r={} +;for(let e=1;e<=t.length;e++)r[e+i]=s[e],o[e+i]=!0,i+=p(t[e-1]) +;e[n]=r,e[n]._emit=o,e[n]._multi=!0}function Z(e){(e=>{ +e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope, +delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={ +_wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope +}),(e=>{if(Array.isArray(e.begin)){ +if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), +K +;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"), +K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{ +if(Array.isArray(e.end)){ +if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"), +K +;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"), +K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){ +function t(t,n){ +return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":"")) +}class n{constructor(){ +this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0} +addRule(e,t){ +t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]), +this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null) +;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|" +}),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex +;const t=this.matcherRe.exec(e);if(!t)return null +;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n] +;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){ +this.rules=[],this.multiRegexes=[], +this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){ +if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n +;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))), +t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){ +return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){ +this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){ +const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex +;let n=t.exec(e) +;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{ +const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)} +return n&&(this.regexIndex+=n.position+1, +this.regexIndex===this.count&&this.considerAll()),n}} +if(e.compilerExtensions||(e.compilerExtensions=[]), +e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.") +;return e.classNameAliases=i(e.classNameAliases||{}),function n(o,r){const a=o +;if(o.isCompiled)return a +;[I,B,Z,D].forEach((e=>e(o,r))),e.compilerExtensions.forEach((e=>e(o,r))), +o.__beforeBegin=null,[T,L,P].forEach((e=>e(o,r))),o.isCompiled=!0;let c=null +;return"object"==typeof o.keywords&&o.keywords.$pattern&&(o.keywords=Object.assign({},o.keywords), +c=o.keywords.$pattern, +delete o.keywords.$pattern),c=c||/\w+/,o.keywords&&(o.keywords=$(o.keywords,e.case_insensitive)), +a.keywordPatternRe=t(c,!0), +r&&(o.begin||(o.begin=/\B|\b/),a.beginRe=t(a.begin),o.end||o.endsWithParent||(o.end=/\B|\b/), +o.end&&(a.endRe=t(a.end)), +a.terminatorEnd=l(a.end)||"",o.endsWithParent&&r.terminatorEnd&&(a.terminatorEnd+=(o.end?"|":"")+r.terminatorEnd)), +o.illegal&&(a.illegalRe=t(o.illegal)), +o.contains||(o.contains=[]),o.contains=[].concat(...o.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{ +variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{ +starts:e.starts?i(e.starts):null +}):Object.isFrozen(e)?i(e):e))("self"===e?o:e)))),o.contains.forEach((e=>{n(e,a) +})),o.starts&&n(o.starts,r),a.matcher=(e=>{const t=new s +;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin" +}))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end" +}),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){ +return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{ +constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}} +const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{ +const i=Object.create(null),s=Object.create(null),o=[];let r=!0 +;const a="Could not find the language '{}', did you forget to load/include a language module?",l={ +disableAutodetect:!0,name:"Plain text",contains:[]};let p={ +ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i, +languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-", +cssSelector:"pre code",languages:null,__emitter:c};function b(e){ +return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s="" +;"object"==typeof t?(i=e, +n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."), +G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), +s=e,i=t),void 0===n&&(n=!0);const o={code:i,language:s};N("before:highlight",o) +;const r=o.result?o.result:E(o.language,o.code,n) +;return r.code=o.code,N("after:highlight",r),r}function E(e,n,s,o){ +const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R) +;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n="" +;for(;t;){n+=R.substring(e,t.index) +;const s=_.case_insensitive?t[0].toLowerCase():t[0],o=(i=s,N.keywords[i]);if(o){ +const[e,i]=o +;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(j+=i),e.startsWith("_"))n+=t[0];else{ +const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0] +;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i +;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{ +if(""===R)return;let e=null;if("string"==typeof N.subLanguage){ +if(!i[N.subLanguage])return void M.addText(R) +;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top +}else e=x(R,N.subLanguage.length?N.subLanguage:null) +;N.relevance>0&&(j+=e.relevance),M.__addSublanguage(e._emitter,e.language) +})():l(),R=""}function u(e,t){ +""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1 +;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue} +const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}} +function h(e,t){ +return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope), +e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap), +R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{ +value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t) +;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e) +;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){ +for(;e.endsParent&&e.parent;)e=e.parent;return e}} +if(e.endsWithParent)return f(e.parent,n,i)}function b(e){ +return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){ +const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const o=N +;N.endScope&&N.endScope._wrap?(g(), +u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(), +d(N.endScope,e)):o.skip?R+=t:(o.returnEnd||o.excludeEnd||(R+=t), +g(),o.excludeEnd&&(R=t));do{ +N.scope&&M.closeNode(),N.skip||N.subLanguage||(j+=N.relevance),N=N.parent +}while(N!==s.parent);return s.starts&&h(s.starts,e),o.returnEnd?0:t.length} +let w={};function y(i,o){const a=o&&o[0];if(R+=i,null==a)return g(),0 +;if("begin"===w.type&&"end"===o.type&&w.index===o.index&&""===a){ +if(R+=n.slice(o.index,o.index+1),!r){const t=Error(`0 width match regex (${e})`) +;throw t.languageName=e,t.badRule=w.rule,t}return 1} +if(w=o,"begin"===o.type)return(e=>{ +const n=e[0],i=e.rule,s=new t(i),o=[i.__beforeBegin,i["on:begin"]] +;for(const t of o)if(t&&(t(e,s),s.isMatchIgnored))return b(n) +;return i.skip?R+=n:(i.excludeBegin&&(R+=n), +g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(o) +;if("illegal"===o.type&&!s){ +const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"")+'"') +;throw e.mode=N,e}if("end"===o.type){const e=m(o);if(e!==ee)return e} +if("illegal"===o.type&&""===a)return 1 +;if(I>1e5&&I>3*o.index)throw Error("potential infinite loop, way more iterations than matches") +;return R+=a,a.length}const _=O(e) +;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"') +;const v=V(_);let k="",N=o||v;const S={},M=new p.__emitter(p);(()=>{const e=[] +;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope) +;e.forEach((e=>M.openNode(e)))})();let R="",j=0,A=0,I=0,T=!1;try{ +if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){ +I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=A +;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(A,e.index),e) +;A=e.index+t}y(n.substring(A))}return M.finalize(),k=M.toHTML(),{language:e, +value:k,relevance:j,illegal:!1,_emitter:M,_top:N}}catch(t){ +if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n), +illegal:!0,relevance:0,_illegalBy:{message:t.message,index:A, +context:n.slice(A-100,A+100),mode:t.mode,resultSoFar:k},_emitter:M};if(r)return{ +language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N} +;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{ +const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)} +;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(k).map((t=>E(t,e,!1))) +;s.unshift(n);const o=s.sort(((e,t)=>{ +if(e.relevance!==t.relevance)return t.relevance-e.relevance +;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1 +;if(O(t.language).supersetOf===e.language)return-1}return 0})),[r,a]=o,c=r +;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{ +let t=e.className+" ";t+=e.parentNode?e.parentNode.className:"" +;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1]) +;return t||(X(a.replace("{}",n[1])), +X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"} +return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return +;if(N("before:highlightElement",{el:e,language:n +}),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e) +;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), +console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), +console.warn("The element with unescaped HTML:"), +console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML) +;t=e;const i=t.textContent,o=n?m(i,{language:n,ignoreIllegals:!0}):x(i) +;e.innerHTML=o.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n +;e.classList.add("hljs"),e.classList.add("language-"+i) +})(e,n,o.language),e.result={language:o.language,re:o.relevance, +relevance:o.relevance},o.secondBest&&(e.secondBest={ +language:o.secondBest.language,relevance:o.secondBest.relevance +}),N("after:highlightElement",{el:e,result:o,text:i})}let y=!1;function _(){ +"loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0 +}function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]} +function v(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{ +s[e.toLowerCase()]=t}))}function k(e){const t=O(e) +;return t&&!t.disableAutodetect}function N(e,t){const n=e;o.forEach((e=>{ +e[n]&&e[n](t)}))} +"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{ +y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_, +highlightElement:w, +highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"), +G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)}, +initHighlighting:()=>{ +_(),G("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")}, +initHighlightingOnLoad:()=>{ +_(),G("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.") +},registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){ +if(W("Language definition for '{}' could not be registered.".replace("{}",e)), +!r)throw t;W(t),s=l} +s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&v(s.aliases,{ +languageName:e})},unregisterLanguage:e=>{delete i[e] +;for(const t of Object.keys(s))s[t]===e&&delete s[t]}, +listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:v, +autoDetection:k,inherit:Q,addPlugin:e=>{(e=>{ +e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{ +e["before:highlightBlock"](Object.assign({block:t.el},t)) +}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{ +e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),o.push(e)}, +removePlugin:e=>{const t=o.indexOf(e);-1!==t&&o.splice(t,1)}}),n.debugMode=()=>{ +r=!1},n.safeMode=()=>{r=!0},n.versionString="11.10.0",n.regex={concat:h, +lookahead:g,either:f,optional:d,anyNumberOfTimes:u} +;for(const t in j)"object"==typeof j[t]&&e(j[t]);return Object.assign(n,j),n +},ne=te({});return ne.newInstance=()=>te({}),ne}() +;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `bash` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict";return e=>{const s=e.regex,t={},n={begin:/\$\{/, +end:/\}/,contains:["self",{begin:/:-/,contains:[t]}]};Object.assign(t,{ +className:"variable",variants:[{ +begin:s.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},n]});const a={ +className:"subst",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE] +},i=e.inherit(e.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),c={ +begin:/<<-?\s*(?=\w+)/,starts:{contains:[e.END_SAME_AS_BEGIN({begin:/(\w+)/, +end:/(\w+)/,className:"string"})]}},o={className:"string",begin:/"/,end:/"/, +contains:[e.BACKSLASH_ESCAPE,t,a]};a.contains.push(o);const r={begin:/\$?\(\(/, +end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},e.NUMBER_MODE,t] +},l=e.SHEBANG({binary:"(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)",relevance:10 +}),m={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0, +contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0};return{ +name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/, +keyword:["if","then","else","elif","fi","for","while","until","in","do","done","case","esac","function","select"], +literal:["true","false"], +built_in:["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset","alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias","set","shopt","autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp","chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"] +},contains:[l,e.SHEBANG(),m,r,i,c,{match:/(\/[a-z._-]+)+/},o,{match:/\\"/},{ +className:"string",begin:/'/,end:/'/},{match:/\\'/},t]}}})() +;hljs.registerLanguage("bash",e)})();/*! `css` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict" +;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video","defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],r=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),t=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),i=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),o=["accent-color","align-content","align-items","align-self","alignment-baseline","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-end-end-radius","border-end-start-radius","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","cx","cy","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","content-visibility","counter-increment","counter-reset","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","empty-cells","enable-background","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flow","flood-color","flood-opacity","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-size","font-size-adjust","font-smoothing","font-stretch","font-style","font-synthesis","font-variant","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","inline-size","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","kerning","justify-content","justify-items","justify-self","left","letter-spacing","lighting-color","line-break","line-height","list-style","list-style-image","list-style-position","list-style-type","marker","marker-end","marker-mid","marker-start","mask","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-wrap","overflow-x","overflow-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","pause","pause-after","pause-before","perspective","perspective-origin","pointer-events","position","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","scale","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","speak","speak-as","src","tab-size","table-layout","text-anchor","text-align","text-align-all","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-transform","text-underline-offset","text-underline-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","vector-effect","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index"].sort().reverse() +;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"}, +BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number", +begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{ +className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{ +scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$", +contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{ +scope:"number", +begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", +relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/} +}))(n),s=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS", +case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"}, +classNameAliases:{keyframePosition:"selector-tag"},contains:[l.BLOCK_COMMENT,{ +begin:/-(webkit|moz|ms|o)-(?=[a-z])/},l.CSS_NUMBER_MODE,{ +className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{ +className:"selector-class",begin:"\\.[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0 +},l.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{ +begin:":("+t.join("|")+")"},{begin:":(:)?("+i.join("|")+")"}]},l.CSS_VARIABLE,{ +className:"attribute",begin:"\\b("+o.join("|")+")\\b"},{begin:/:/,end:/[;}{]/, +contains:[l.BLOCK_COMMENT,l.HEXCOLOR,l.IMPORTANT,l.CSS_NUMBER_MODE,...s,{ +begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri" +},contains:[...s,{className:"string",begin:/[^)]/,endsWithParent:!0, +excludeEnd:!0}]},l.FUNCTION_DISPATCH]},{begin:a.lookahead(/@/),end:"[{;]", +relevance:0,illegal:/:/,contains:[{className:"keyword",begin:/@-?\w[\w]*(-\w+)*/ +},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{ +$pattern:/[a-z-]+/,keyword:"and or not only",attribute:r.join(" ")},contains:[{ +begin:/[a-z-]+(?=:)/,className:"attribute"},...s,l.CSS_NUMBER_MODE]}]},{ +className:"selector-tag",begin:"\\b("+e.join("|")+")\\b"}]}}})() +;hljs.registerLanguage("css",e)})();/*! `json` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],s={ +scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",aliases:["jsonc"], +keywords:{literal:a},contains:[{className:"attr", +begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/,relevance:1.01},{match:/[{}[\],:]/, +className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,s,e.C_NUMBER_MODE,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE], +illegal:"\\S"}}})();hljs.registerLanguage("json",e)})();/*! `lisp` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict";return e=>{ +const n="[a-zA-Z_\\-+\\*\\/<=>&#][a-zA-Z0-9_\\-+*\\/<=>&#!]*",a="\\|[^]*?\\|",i="(-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|-)?\\d+)?",s={ +className:"literal",begin:"\\b(t{1}|nil)\\b"},l={className:"number",variants:[{ +begin:i,relevance:0},{begin:"#(b|B)[0-1]+(/[0-1]+)?"},{ +begin:"#(o|O)[0-7]+(/[0-7]+)?"},{begin:"#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?"},{ +begin:"#(c|C)\\("+i+" +"+i,end:"\\)"}]},b=e.inherit(e.QUOTE_STRING_MODE,{ +illegal:null}),g=e.COMMENT(";","$",{relevance:0}),r={begin:"\\*",end:"\\*"},t={ +className:"symbol",begin:"[:&]"+n},c={begin:n,relevance:0},d={begin:a},o={ +contains:[l,b,r,t,{begin:"\\(",end:"\\)",contains:["self",s,b,l,c]},c], +variants:[{begin:"['`]\\(",end:"\\)"},{begin:"\\(quote ",end:"\\)",keywords:{ +name:"quote"}},{begin:"'"+a}]},v={variants:[{begin:"'"+n},{ +begin:"#'"+n+"(::"+n+")*"}]},m={begin:"\\(\\s*",end:"\\)"},u={endsWithParent:!0, +relevance:0};return m.contains=[{className:"name",variants:[{begin:n,relevance:0 +},{begin:a}]},u],u.contains=[o,v,m,s,l,b,g,r,t,d,c],{name:"Lisp",illegal:/\S/, +contains:[l,e.SHEBANG(),s,b,g,o,v,m,c]}}})();hljs.registerLanguage("lisp",e) +})();/*! `markdown` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict";return e=>{const n={begin:/<\/?[A-Za-z_]/, +end:">",subLanguage:"xml",relevance:0},a={variants:[{begin:/\[.+?\]\[.*?\]/, +relevance:0},{ +begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, +relevance:2},{ +begin:e.regex.concat(/\[.+?\]\(/,/[A-Za-z][A-Za-z0-9+.-]*/,/:\/\/.*?\)/), +relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{ +begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/ +},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0, +returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)", +excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[", +end:"\\]",excludeBegin:!0,excludeEnd:!0}]},i={className:"strong",contains:[], +variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}] +},s={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{ +begin:/_(?![_\s])/,end:/_/,relevance:0}]},c=e.inherit(i,{contains:[] +}),t=e.inherit(s,{contains:[]});i.contains.push(t),s.contains.push(c) +;let g=[n,a];return[i,s,c,t].forEach((e=>{e.contains=e.contains.concat(g) +})),g=g.concat(i,s),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{ +className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:g},{ +begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n", +contains:g}]}]},n,{className:"bullet",begin:"^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", +end:"\\s+",excludeEnd:!0},i,s,{className:"quote",begin:"^>\\s+",contains:g, +end:"$"},{className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{ +begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{ +begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))", +contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},{ +begin:"^[-\\*]{3,}",end:"$"},a,{begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{ +className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{ +className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},{scope:"literal", +match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}})() +;hljs.registerLanguage("markdown",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var t=(()=>{"use strict";return t=>({name:"Plain text", +aliases:["text","txt"],disableAutodetect:!0})})() +;hljs.registerLanguage("plaintext",t)})();/*! `xml` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict";return e=>{ +const a=e.regex,n=a.concat(/[\p{L}_]/u,a.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),s={ +className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},t={begin:/\s/, +contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}] +},i=e.inherit(t,{begin:/\(/,end:/\)/}),c=e.inherit(e.APOS_STRING_MODE,{ +className:"string"}),l=e.inherit(e.QUOTE_STRING_MODE,{className:"string"}),r={ +endsWithParent:!0,illegal:/`]+/}]}]}]};return{ +name:"HTML, XML", +aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"], +case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin://,relevance:10,contains:[t,l,c,i,{begin:/\[/,end:/\]/,contains:[{ +className:"meta",begin://,contains:[t,i,l,c]}]}] +},e.COMMENT(//,{relevance:10}),{begin://, +relevance:10},s,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/, +relevance:10,contains:[l]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"style"},contains:[r],starts:{ +end:/<\/style>/,returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag", +begin:/)/,end:/>/,keywords:{name:"script"},contains:[r],starts:{ +end:/<\/script>/,returnEnd:!0,subLanguage:["javascript","handlebars","xml"]}},{ +className:"tag",begin:/<>|<\/>/},{className:"tag", +begin:a.concat(//,/>/,/\s/)))), +end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:r}]},{ +className:"tag",begin:a.concat(/<\//,a.lookahead(a.concat(n,/>/))),contains:[{ +className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}} +})();hljs.registerLanguage("xml",e)})();/*! `yaml` grammar compiled for Highlight.js 11.10.0 */ +(()=>{var e=(()=>{"use strict";return e=>{ +const n="true false yes no null",a="[\\w#;/?:@&=+$,.~*'()[\\]]+",s={ +className:"string",relevance:0,variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/ +},{begin:/\S+/}],contains:[e.BACKSLASH_ESCAPE,{className:"template-variable", +variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]}]},i=e.inherit(s,{ +variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),l={ +end:",",endsWithParent:!0,excludeEnd:!0,keywords:n,relevance:0},t={begin:/\{/, +end:/\}/,contains:[l],illegal:"\\n",relevance:0},g={begin:"\\[",end:"\\]", +contains:[l],illegal:"\\n",relevance:0},b=[{className:"attr",variants:[{ +begin:/\w[\w :()\./-]*:(?=[ \t]|$)/},{begin:/"\w[\w :()\./-]*":(?=[ \t]|$)/},{ +begin:/'\w[\w :()\./-]*':(?=[ \t]|$)/}]},{className:"meta",begin:"^---\\s*$", +relevance:10},{className:"string", +begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{ +begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0, +relevance:0},{className:"type",begin:"!\\w+!"+a},{className:"type", +begin:"!<"+a+">"},{className:"type",begin:"!"+a},{className:"type",begin:"!!"+a +},{className:"meta",begin:"&"+e.UNDERSCORE_IDENT_RE+"$"},{className:"meta", +begin:"\\*"+e.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)", +relevance:0},e.HASH_COMMENT_MODE,{beginKeywords:n,keywords:{literal:n}},{ +className:"number", +begin:"\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" +},{className:"number",begin:e.C_NUMBER_RE+"\\b",relevance:0},t,g,s],r=[...b] +;return r.pop(),r.push(i),l.contains=r,{name:"YAML",case_insensitive:!0, +aliases:["yml"],contains:b}}})();hljs.registerLanguage("yaml",e)})(); \ No newline at end of file diff --git a/images/static/rendering.png b/images/static/rendering.png new file mode 100644 index 00000000..307231e2 Binary files /dev/null and b/images/static/rendering.png differ diff --git a/index.html b/index.html new file mode 100644 index 00000000..300de26b --- /dev/null +++ b/index.html @@ -0,0 +1,1485 @@ + + + + 40Ants Doc Manual + + + + + + + + + + + + + + + + + + + +
Fork me on GitHub + + +

40Ants Doc Manual

+ + + + + + + + + +

About this fork

This system is a fork of MGL-PAX.

There are a few reasons, why I've created the fork.

The main goal is to extract a core features into the 40ants-doc system +with as little dependencies as possible. This is important, because with MGL-PAX's +style, you define documentation sections in your library's code, which makes +it dependent on the documentation system. However, heavy weight dependencies +like IRONCLAD, 3BMD or SWANK should not be required.

The seconds goal was to refactor a 3.5k lines of pax.lisp file into +a smaller modules to make navigation easier. This will help any person +who will decide to learn how the documentation builder works. Also, +granular design will make it possible loading subsystems like SLIME or SLY +integration.

The third goal was to make documentation processing more sequential and hackable. +To introduce hooks for adding new markup languages, and HTML themes.

Why this fork is different

Here are features already implemented in this fork:

  • Core system 40ants-doc now has only two dependencies on NAMED-READTABLES + and PYTHONIC-STRING-READER. If you want to compile a documentation, load + 40ants-doc-full system which will download such dependencies as markdown + parser and more.

  • Now you don't have to import any locative symbols into your package. Import + only a defsection macro and it will be enough to define documentation for + your library!

  • Added a warning mechanism, which will issue such warnings on words which looks + like a symbol, but when real symbol or reference is absent:

+ WARNING: Unable to find target for reference #<XREF "FIND-SOURCE" GENERIC-FUNCTION> + mentioned at 40Ants Doc Manual / Extension API / Reference Based Extensions +

  • Documentation processing now uses CommonDoc as intermediate format, and markup languages + other than Markdown can be supported.

  • Added a JS search index which will work when you are hosting pages on a static website + like GitHub pages.

  • It is possible to render pages in multiple formats and having cross references between them. + See Multiple Formats.

I'm planning to extend this fork even more. Read todo section to learn about +proposed features or start a new discussion +on the GitHub to suggest a new feature.

See full list of changes in the ChangeLog section.

40ANTS-DOC ASDF System Details

40ANTS-DOC-FULL ASDF System Details

Links

Here is the official repository and +the HTML documentation for the latest version.

This system is a fork of the MGL-PAX. +Because of massive refactoring, it is incompatible with original repository.

Background

Here is the story behind the MGL-PAX, precursor of 40ants-doc, written +by Gábor Melis.

As a user, I frequently run into documentation that's incomplete +and out of date, so I tend to stay in the editor and explore the +code by jumping around with SLIME's M-.. As a library +author, I spend a great deal of time polishing code, but precious +little writing documentation.

In fact, I rarely write anything more comprehensive than docstrings +for exported stuff. Writing docstrings feels easier than writing a +separate user manual and they are always close at hand during +development. The drawback of this style is that users of the library +have to piece the big picture together themselves.

That's easy to solve, I thought, let's just put all the narrative +that holds docstrings together in the code and be a bit like a +Literate Programming weenie turned inside out. The original +prototype which did almost everything I wanted was this:

(defmacro defsection (name docstring)
+  `(defun ,name () ,docstring))

Armed with defsection, I soon found myself organizing code following +the flow of user level documentation and relegated comments to +implementational details entirely. However, some portions of +defsection docstrings were just listings of all the functions, +macros and variables related to the narrative, and this list was +effectively repeated in the DEFPACKAGE form complete with little +comments that were like section names. A clear violation of +OAOO, one of them had to go, so defsection got a list of +symbols to export.

That was great, but soon I found that the listing of symbols is +ambiguous if, for example, a function, a compiler macro and a class +are named by the same symbol. This did not concern exporting, of +course, but it didn't help readability. Distractingly, on such +symbols, M-. was popping up selection dialogs. There were two +birds to kill, and the symbol got accompanied by a type which was +later generalized into the concept of locatives:

(defsection @introduction ()
+  "A single line for one man ..."
+  (foo class)
+  (bar function))

After a bit of elisp hacking, M-. was smart enough to disambiguate +based on the locative found in the vicinity of the symbol and +everything was good for a while.

Then I realized that sections could refer to other sections if there +were a section locative. Going down that path, I soon began to feel +the urge to generate pretty documentation as all the necessary +information was manifest in the defsection forms. The design +constraint imposed on documentation generation was that following +the typical style of upcasing symbols in docstrings there should be +no need to explicitly mark up links: if M-. works, then the +documentation generator shall also be able find out what's being +referred to.

I settled on Markdown as a reasonably non-intrusive +format, and a few thousand lines later MGL-PAX was born.

Tutorial

40ants-doc provides an extremely poor man's Explorable Programming +environment. Narrative primarily lives in so called sections that +mix markdown docstrings with references to functions, variables, +etc, all of which should probably have their own docstrings.

The primary focus is on making code easily explorable by using +SLIME's M-. (slime-edit-definition). See how to enable some +fanciness in Emacs Integration. Generating documentation +from sections and all the referenced items in Markdown or HTML +format is also implemented.

With the simplistic tools provided, one may accomplish similar +effects as with Literate Programming, but documentation is generated +from code, not vice versa and there is no support for chunking yet. +Code is first, code must look pretty, documentation is code.

When the code is loaded into the lisp, pressing M-. in SLIME on +the name of the section will take you there. Sections can also refer +to other sections, packages, functions, etc and you can keep exploring.

Here is an example of how it all works together:

(uiop:define-package #:foo-random
+  (:nicknames #:40ants-doc-full/tutorial)
+  (:documentation "This package provides various utilities for
+                   random. See @FOO-RANDOM-MANUAL.")
+  (:use #:common-lisp
+        #:40ants-doc)
+  (:import-from #:40ants-doc/ignored-words
+                #:ignore-words-in-package)
+  (:export #:foo-random-state
+           #:state
+           #:*foo-state*
+           #:gaussian-random
+           #:uniform-random))
+
+(in-package foo-random)
+
+(defsection @foo-random-manual (:title "Foo Random manual"
+                                :ignore-words ("FOO"))
+  "Here you describe what's common to all the referenced (and
+   exported) functions that follow. They work with *FOO-STATE*,
+   and have a :RANDOM-STATE keyword arg. Also explain when to
+   choose which."
+  (foo-random-state class)
+  (state (reader foo-random-state))
+  
+  "Hey we can also print states!"
+  
+  (print-object (method () (foo-random-state t)))
+  (*foo-state* variable)
+  (gaussian-random function)
+  (uniform-random function)
+  ;; this is a subsection
+  (@foo-random-examples section))
+
+(defclass foo-random-state ()
+  ((state :reader state
+          :documentation "Returns random foo's state.")))
+
+(defmethod print-object ((object foo-random-state) stream)
+  (print-unreadable-object (object stream :type t)))
+
+(defvar *foo-state* (make-instance 'foo-random-state)
+  "Much like *RANDOM-STATE* but uses the FOO algorithm.")
+
+(defun uniform-random (limit &key (random-state *foo-state*))
+  "Return a random number from the between 0 and LIMIT (exclusive)
+   uniform distribution."
+  (declare (ignore limit random-state))
+  nil)
+
+(defun gaussian-random (stddev &key (random-state *foo-state*))
+  "Return not a random number from a zero mean normal distribution with
+   STDDEV."
+  (declare (ignore stddev random-state))
+  nil)
+
+(defsection @foo-random-examples (:title "Examples")
+  "Let's see the transcript of a real session of someone working
+   with FOO:
+
+   ```cl-transcript
+   (values (princ :hello) (list 1 2))
+   .. HELLO
+   => :HELLO
+   => (1 2)
+
+   (make-instance 'foo-random-state)
+   ==> #<FOO-RANDOM-STATE >
+   ```")
+
+

Generating documentation in a very stripped down markdown format is +easy:

(40ants-doc-full/builder:render-to-string
+  @foo-random-manual
+  :format :markdown)

For this example, the generated markdown would look like this:

<a id="x-28FOO-RANDOM-3A-3A-40FOO-RANDOM-MANUAL-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
+
+# Foo Random manual
+
+Here you describe what's common to all the referenced (and
+exported) functions that follow. They work with [`*foo-state*`][2133],
+and have a `:RANDOM-STATE` keyword arg. Also explain when to
+choose which.
+
+<a id="x-28FOO-RANDOM-3AFOO-RANDOM-STATE-20CLASS-29"></a>
+
+## [class](1cdd) `foo-random:foo-random-state` ()
+
+<a id="x-28FOO-RANDOM-3ASTATE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-20FOO-RANDOM-3AFOO-RANDOM-STATE-29-29"></a>
+
+## [reader](eec8) `foo-random:state` (foo-random-state) ()
+
+Returns random foo's state.
+
+Hey we can also print states!
+
+<a id="x-28PRINT-OBJECT-20-28METHOD-20NIL-20-28FOO-RANDOM-3AFOO-RANDOM-STATE-20T-29-29-29"></a>
+
+## [method](0a8c) `common-lisp:print-object` (object foo-random-state) stream
+
+<a id="x-28FOO-RANDOM-3A-2AFOO-STATE-2A-20-28VARIABLE-29-29"></a>
+
+## [variable](7026) `foo-random:*foo-state*` #<foo-random-state >
+
+Much like `*RANDOM-STATE*` but uses the `FOO` algorithm.
+
+<a id="x-28FOO-RANDOM-3AGAUSSIAN-RANDOM-20FUNCTION-29"></a>
+
+## [function](1833) `foo-random:gaussian-random` stddev &key (random-state \*foo-state\*)
+
+Return not a random number from a zero mean normal distribution with
+`STDDEV`.
+
+<a id="x-28FOO-RANDOM-3AUNIFORM-RANDOM-20FUNCTION-29"></a>
+
+## [function](45c0) `foo-random:uniform-random` limit &key (random-state \*foo-state\*)
+
+Return a random number from the between 0 and `LIMIT` (exclusive)
+uniform distribution.
+
+<a id="x-28FOO-RANDOM-3A-3A-40FOO-RANDOM-EXAMPLES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29"></a>
+
+## Examples
+
+Let's see the transcript of a real session of someone working
+with `FOO`:
+
+```cl-transcript
+(values (princ :hello) (list 1 2))
+.. HELLO
+=> :HELLO
+=> (1 2)
+
+(make-instance 'foo-random-state)
+==> #<FOO-RANDOM-STATE >
+```
+
+[2133]: #x-28FOO-RANDOM-3A-2AFOO-STATE-2A-20-28VARIABLE-29-29
+[1cdd]: https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L35
+[eec8]: https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L36
+[0a8c]: https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L39
+[7026]: https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L42
+[45c0]: https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L45
+[1833]: https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L51

MGL-PAX supported the plain text format which was more readble when viewed +from a simple text editor, but I've dropped support for plain text in this fork +because most time documentation are read in the browser these days.

To render into the files, use 40ants-doc-full/builder:render-to-files +and 40ants-doc-full/builder:update-asdf-system-docs functions.

Last one can even generate documentation for different, but related +libraries at the same time with the output going to different files, +but with cross-page links being automatically added for symbols +mentioned in docstrings. See Generating Documentation for +some convenience functions to cover the most common cases.

Note how (*FOO-STATE* VARIABLE) in the defsection form includes its documentation in +@FOO-RANDOM-MANUAL. The symbols variable and function are just two +instances of 'locatives' which are used in defsection to refer to +definitions tied to symbols. See Locative Types.

The transcript in the code block tagged with cl-transcript is +automatically checked for up-to-dateness. See +Transcripts.

Emacs Integration

Integration into SLIME's M-. (slime-edit-definition) allows one +to visit the source location of the thing that's identified by a +symbol and the locative before or after the symbol in a buffer. With +this extension, if a locative is the previous or the next expression +around the symbol of interest, then M-. will go straight to the +definition which corresponds to the locative. If that fails, M-. +will try to find the definitions in the normal way which may involve +popping up an xref buffer and letting the user interactively select +one of possible definitions.

Note that the this feature is implemented in terms of +SWANK-BACKEND:FIND-SOURCE-LOCATION and +SWANK-BACKEND:FIND-DEFINITIONS whose support varies across the Lisp +implementations. Sadly, but this integration does not with SLY because +it does not support hooks on finding definition.

In the following examples, pressing M-. when the cursor is on one +of the characters of FOO or just after FOO, will visit the +definition of function FOO:

function foo
+foo function
+(function foo)
+(foo function)
+

In particular, references in a defsection form are in (SYMBOL +locative) format so M-. will work just fine there.

Just like vanilla M-., this works in comments and docstrings. In +this example pressing M-. on FOO will visit FOO's default +method:

;;;; See FOO `(method () (t t t))` for how this all works.
+;;;; But if the locative has semicolons inside: FOO `(method
+;;;; () (t t t))`, then it won't, so be wary of line breaks
+;;;; in comments.

With a prefix argument (C-u M-.), one can enter a symbol plus a +locative separated by whitespace to preselect one of the +possibilities.

The M-. extensions can be enabled by adding this to your Emacs +initialization file (or loading src/pax.el):

;;; M-. integration
+
+(defun 40ants-doc-edit-locative-definition (name &optional where)
+  (or (40ants-doc-locate-definition name (40ants-doc-locative-before))
+      (40ants-doc-locate-definition name (40ants-doc-locative-after))
+      (40ants-doc-locate-definition name (40ants-doc-locative-after-in-brackets))
+      ;; support "foo function" and "function foo" syntax in
+      ;; interactive use
+      (let ((pos (cl-position ?\s name)))
+        (when pos
+          (or (40ants-doc-locate-definition (cl-subseq name 0 pos)
+                                            (cl-subseq name (1+ pos)))
+              (40ants-doc-locate-definition (cl-subseq name (1+ pos))
+                                            (cl-subseq name 0 pos)))))))
+
+(defun 40ants-doc-locative-before ()
+  (ignore-errors (save-excursion
+                   (slime-beginning-of-symbol)
+                   (slime-last-expression))))
+
+(defun 40ants-doc-locative-after ()
+  (ignore-errors (save-excursion
+                   (slime-end-of-symbol)
+                   (slime-forward-sexp)
+                   (slime-last-expression))))
+
+(defun 40ants-doc-locative-after-in-brackets ()
+  (ignore-errors (save-excursion
+                   (slime-end-of-symbol)
+                   (skip-chars-forward "`" (+ (point) 1))
+                   (when (and (= 1 (skip-chars-forward "\\]" (+ (point) 1)))
+                              (= 1 (skip-chars-forward "\\[" (+ (point) 1))))
+                     (buffer-substring-no-properties
+                      (point)
+                      (progn (search-forward "]" nil (+ (point) 1000))
+                             (1- (point))))))))
+
+(defun 40ants-doc-locate-definition (name locative)
+  (when locative
+    (let ((location
+           (slime-eval
+            ;; Silently fail if mgl-pax is not loaded.
+            `(cl:when (cl:find-package :mgl-pax)
+                      (cl:funcall
+                       (cl:find-symbol
+                        (cl:symbol-name :locate-definition-for-emacs) :mgl-pax)
+                       ,name ,locative)))))
+      (when (and (consp location)
+                 (not (eq (car location) :error)))
+        (slime-edit-definition-cont
+         (list (make-slime-xref :dspec `(,name)
+                                :location location))
+         "dummy name"
+         where)))))
+
+(when (boundp 'slime-edit-definition-hooks)
+  (add-hook 'slime-edit-definition-hooks '40ants-doc-edit-locative-definition))
+

Note, there is also another part of Emacs code, related to +transcription blocks. It is described in Transcripts section.

Basics

Now let's examine the most important pieces in detail.

Defining Sections

macro
name (&key (package '\*package\*) (package-symbol nil) (readtable-symbol '\*readtable\*) (section-class 'section) (export nil) title link-title-to (discard-documentation-p \*discard-documentation-p\*) (external-docs nil) (external-links nil) (ignore-words nil)) &body entries

Define a documentation section and maybe export referenced symbols. +A bit behind the scenes, a global variable with NAME is defined and +is bound to a section object. By convention, section names +start with the character @. See Tutorial for an example.

ENTRIES consists of docstrings and references. Docstrings are +arbitrary strings in markdown format, references are defined in the +forms:

(symbol locative) or ((symbol1 symbol2 ... symboln) locative)
+

For example, (FOO FUNCTION) refers to the function FOO, (@BAR +SECTION) says that @BAR is a subsection of this +one. (BAZ (METHOD () (T T T))) refers to the default method of the +three argument generic function BAZ. (FOO FUNCTION) is +equivalent to (FOO (FUNCTION)).

A locative in a reference can either be a symbol or it can be a list +whose CAR is a symbol. In either case, the symbol is the called the +type of the locative while the rest of the elements are the locative +arguments. See Locative Types for the list of locative +types available out of the box.

The same symbol can occur multiple times in ENTRIES, typically +with different locatives, but this is not required.

The references are not looked up (see 40ants-doc/reference:resolve in the +Extension API) until documentation is generated, so it is +allowed to refer to things yet to be defined.

If you set :EXPORT to true, the referenced symbols and NAME are +candidates for exporting. A candidate symbol is exported if

  • it is accessible in package (it's not OTHER-PACKAGE:SOMETHING) + and

  • there is a reference to it in the section being defined with a + locative whose type is approved by exportable-locative-type-p.

The original idea with confounding documentation and exporting is to force +documentation of all exported symbols. However when forking MGL-PAX into +40ants-doc I've decided explicit imports make code more readable, and +changed the default for :EXPORT argument to NIL and added automatic +warnings to help find exported symbols not referenced from the documention.

If you decide to use :EXPORT t argument, note it will cause +package variance +error on SBCL. To prevent it, use UIOP:DEFINE-PACKAGE instead +of CL:DEFPACKAGE.

:TITLE is a non-marked-up string or NIL. If non-nil, it determines +the text of the heading in the generated output. :LINK-TITLE-TO is a +reference given as an +(OBJECT LOCATIVE) pair or NIL, to which the heading will link when +generating HTML. If not specified, the heading will link to its own +anchor.

When :DISCARD-DOCUMENTATION-P (defaults to *discard-documentation-p*) +is true, ENTRIES will not be recorded to save memory.

EXTERNAL-DOCS argument can be a list of URLs leading to documentation +of other libraries. These libraries should be documented using 40ants-doc +and you'll be able to mention symbols from them and have automatic +cross-links.

EXTERNAL-LINKS argument could contain an alist of ("name" . "URL") pairs. +These pairs will be tranformed to name: URL text and appended to each +markdown part of the defined chapter. This argument is useful when you are +having more than one text part in the chapter and want to reference same +URL from all of them using short markdown links.

:IGNORE-WORDS allows to pass a list of strings which should not cause +warnings. Usually these are uppercased words which are not symbols +in the current package, like SLIME, LISP, etc.

When you use DOCS-BUILDER, you might want +to define a @readme variable to make README.md file with the same content as +your main documentation. This case might be popular for libraries having +a short documentation.

To define @readme as a copy of the main doc, export @readme symbol and do this in the code:

(defparameter @readme (40ants-doc:copy-section @index))

The default value of defsection's DISCARD-DOCUMENTATION-P argument. +One may want to set *DISCARD-DOCUMENTATION-P* to true before +building a binary application.

Sometimes code might be generated without source location attached.

For example Mito generates slot readers this way. +Such symbols should be added to this list to skip warnings during the documentation build.

Use such code to add a new symbol to ignore:

(eval-when (:compile-toplevel :load-toplevel :execute)
+  (pushnew 'reblocks-auth/models:profile-user
+           40ants-doc:*symbols-with-ignored-missing-locations*))

Returns a list of words or symbols to ignore in OBJ's documentation.

Should return T if objects implements a method for ignored-words generic-function.

Adds given symbols or string to ignore list bound to the current package.

You will not be warned when one of these symbols is not documented +or documented and not exported from the package.

Cross-referencing

You can cross-reference entries from different documentation parts be it +content of the defsection or a documentation string of some lisp entity.

The simples form of cross reference is uppercased name of the entity, like: +40ants-doc/reference:make-reference. But if there are more than one locative +bound to the name, then all these links will be rendered in a parenthesis. +For example, docstring:

See 40ANTS-DOC/SOURCE-API:FIND-SOURCE.

will be rendered as "See 40ants-doc/source-api:find-source (1 2)." because +there is a generic-function and a method called find-source (1 2).

But you can mention a locative type in a docstring before or after a symbol name:

See 40ANTS-DOC/SOURCE-API:FIND-SOURCE generic-function.

and it will be rendered as: See 40ants-doc/source-api:find-source generic-function.

In case if you don't want locative type to appear in the resulting documentation +or if locative type is complex, then you can use in a docstring markdown reference:

See [40ANTS-DOC/SOURCE-API:FIND-SOURCE][(method () (40ants-doc/reference:reference))].

and link will lead to the specified method: See 40ants-doc/source-api:find-source.

Autodocumentation

40ants-doc system provides an additional subsystem and package 40ANTS-DOC/AUTODOC. +This subsystem contains a macro defautodoc, which is similar to +defsection, but generates a section filled with content of the given ASDF system.

This subsystem is not loaded by default because it brings a multiple additional dependencies:

  • alexandria

  • cl-change-case

  • cl-ppcre

  • cl-unicode

  • closer-mop

but I'm trying to keep dependencies of the core 40ants-doc system is minimal.

Use it if your don't care or your have docs in a separate ASDF sybsystem.

macro
name (&key system (title "api") (show-system-description-p nil) (readtable-symbol '\*readtable\*) (section-class 'section) (external-docs nil) (external-links nil) (ignore-words nil))

Macro defautodoc collects all packages of the ASDF system and analyzes all external symbols. +In resulting documentation symbols are grouped by packages and types.

Here is how you can define a section using defautodoc:

(40ants/defautodoc @api (:system :cl-telegram-bot))

This form will generate complete API reference for the CL-TELEGRAM-BOT system.

The most wonderful it that you can integrate this @api section with handwritten +documentation like this:

(defsection @index (:title "cl-telegram-bot - Telegram Bot API")
+  (@installation section)
+  (@quickstart section)
+  (@api section))
+
+When SHOW-SYSTEM-DESCRIPTION-P argument is not NIL, section will be started from the
+description of the given ASDF system.

Generating Documentation

To make documentation builder work, you need to load 40ants-doc-full asdf system.

There are two core functions which render documentation to a string or files:

function
object &key (format :html) (source-uri-fn 40ants-doc/reference-api:\*source-uri-fn\*) (full-package-names t)

Renders given CommonDoc node into the string using specified format. +Supported formats are :HTML and :MARKDOWN.

This function is useful for debugging 40ants-doc itself.

function
sections &key (theme '40ants-doc-full/themes/default:default-theme) (base-dir #p"./") (base-url nil) (source-uri-fn 40ants-doc/reference-api:\*source-uri-fn\*) (warn-on-undocumented-packages 40ants-doc-full/commondoc/page::\*warn-on-undocumented-packages\*) (clean-urls 40ants-doc-full/rewrite::\*clean-urls\*) (downcase-uppercase-code 40ants-doc-full/builder/vars::\*downcase-uppercase-code\*) (format :html) highlight-languages highlight-theme (full-package-names t)

Renders given sections or pages into a files on disk.

By default, it renders in to HTML, but you can specify FORMAT argument. +Supported formats are :HTML and :MARKDOWN.

Returns an absolute pathname to the output directory as the first value +and pathnames corresponding to each of given sections.

When WARN-ON-UNDOCUMENTED-PACKAGES is true, then builder will check if there +are other packages of the package-inferred system with external but +not documented symbols. Otherwise, external symbols are searched only +in packages with at least one documented entity.

If CLEAN-URLS is true, then builder rewrites filenames and urls to make +it possible to host files on site without showing .html files inside. Also, +you need to specify a BASE-URL, to make urls absolute if you are rendering +markdown files together with HTML.

If DOWNCASE-UPPERCASE-CODE is true, then all references to symbols will be +downcased.

THEME argument should be a theme class name. By default it is +40ants-doc-full/themes/default:default-theme. See Defining a Custom Theme +to learn how to define themes.

HIGHLIGHT-LANGUAGES and HIGHLIGHT-THEME arguments allow to redefine theme's +settings for Highlight.js. Languages should be a list of strings where each +item is a language name, supported by Highlight.js. Theme should be a +name of a supported theme. You can preview different highlighting themes here

When FULL-PACKAGE-NAMES is true (default), then all symbols in documentation headers +are rendered in their fully qualified form. This helps a lot when you are documenting +a package inferred ASDF system.

When building HTML documentation, this function also renders and index file `references.json +with references to all documented entities. You can give a list of urls to such reference files +as EXTERNAL-DOCS argument of defsection macro if you want to reference entities from other libraries.

Besides render-to-string and render-to-files a convenience function is provided + to serve the common case of having an ASDF system with a readme and a directory for the +HTML documentation.

function
SECTIONS-OR-PAGES ASDF-SYSTEM &KEY (README-SECTIONS NIL) (CHANGELOG-SECTIONS NIL) (THEME '40ANTS-DOC-FULL/THEMES/DEFAULT:DEFAULT-THEME) (WARN-ON-UNDOCUMENTED-PACKAGES 40ANTS-DOC-FULL/COMMONDOC/PAGE::\*WARN-ON-UNDOCUMENTED-PACKAGES\*) (BASE-URL NIL) (DOCS-DIR #P"docs/") (CLEAN-URLS 40ANTS-DOC-FULL/REWRITE::\*CLEAN-URLS\*) (DOWNCASE-UPPERCASE-CODE 40ANTS-DOC-FULL/BUILDER/VARS::\*DOWNCASE-UPPERCASE-CODE\*) HIGHLIGHT-LANGUAGES HIGHLIGHT-THEME (FULL-PACKAGE-NAMES T)

Generate pretty HTML documentation for a single ASDF system, +possibly linking to github. If you are migrating from MGL-PAX, +then note, this function replaces UPDATE-ASDF-SYSTEM-HTML-DOCS +and UPDATE-ASDF-SYSTEM-README while making it possible to generate +a crosslinks between README.md and HTML docs. The same way you +can generate a ChangeLog.md file using :CHANGELOG-SECTIONS argument. +See Changelog Generation section to learn about +40ants-doc/changelog:defchangelog helper.

Both :README-SECTIONS and :CHANGELOG-SECTIONS arguments may be a single +item or a list.

See docs on render-to-files function to learn about meaning of +BASE-DIR, BASE-URL, SOURCE-URI-FN, WARN-ON-UNDOCUMENTED-PACKAGES, CLEAN-URLS, +DOWNCASE-UPPERCASE-CODE, THEME, HIGHLIGHT-LANGUAGES and HIGHLIGHT-THEME arguments.

Example usage:

(40ants-doc-full/builder:update-asdf-system-docs 40ants-doc-full/doc:@index
+                                                 :40ants-doc
+                                                 :readme-sections 40ants-doc-full/doc:@readme)

This is just a shorthand to call render-to-files for ASDF system.

All sections, listed in :README-SECTIONS argment will be concantenated into the README.md. +Some symbols, referenced in the :README-SECTIONS but not documented there will be +linked to the HTML documentation. To make this work for a hosted static sites, +then provide :BASE-URL of the site, otherwise, links will be relative.

In MGL-PAX this function supported such parameters as :UPDATE-CSS-P and :PAGES, +but in 40ants-doc javascript and CSS files are updated automatically. See documentation +on render-to-files to learn how does page separation and other parameters work.

If you want a more generic wrapper for building documentation for your projects, +take a look at DOCS-BUILDER.

Returns an ASDF system currently documented by call to update-asdf-system-docs.

This function can be used by your extensions to do add some additional features +like github stripe "Fork Me".

A list of blocks of links to be display on the sidebar on the left, +above the table of contents. A block is of the form +(&KEY TITLE ID LINKS), where TITLE will be displayed at the top of the block in a +HTML div with id, followed by the links. LINKS is a list +of (URI LABEL) elements.`

Is not supported yet.

Like *document-html-top-blocks-of-links*, only it is displayed +below the table of contents.

Is not supported yet.

Multiple Formats

With 40ants-doc you can render HTML and Markdown documentation simultaneously. +This way, you can cross-reference entities from the README.md or ChangeLog.md to HTML docs.

To render documents in multiple formats, you have to pass to function render-to-files not +40ants-doc:section objects, but PAGE objects. Page object consists of one or more sections and additional +information such as document format. A section can belong to a multiple pages usually having different +formats. This allows you to include "tutorial" section into both HTML docs and README.

Here is an example of rendering the full documentation and a README with only introduction and tutorial:

(defsection @full-manual (:title "Manual")
+  (@introduction)
+  (@tutorial)
+  (@api)
+  (@changelog))
+
+(render-to-files
+ (list @full-manual
+       (40ants-doc-full/page:make-page (list @introduction
+                                        @tutorial)
+                                       :format :markdown
+                                       :base-filename "README")
+       (40ants-doc-full/page:make-page @changelog
+                                       :format :markdown
+                                       :base-filename "ChangeLog")))

The same approach works with the update-asdf-system-docs function.

Changelog Generation

macro
(&KEY (TITLE "ChangeLog") IGNORE-WORDS EXTERNAL-DOCS EXTERNAL-LINKS) &BODY VERSIONS

This macro might be used to define a ChangeLog in a structured way. +With defchangelog you specify a body where each sublist starts with +a version number and the rest is it's description in the markdown +format. You can mention symbols from the rest of the documentation +and they will be cross-linked automatically if you are using +40ants-doc-full/builder:update-asdf-system-docs function.

Here is an example:

(defchangelog ()
+  (0.2.0
+   "- Feature B implemented.
+    - Bug was fixed in function FOO.")
+  
+  (0.1.0
+   "- Project forked from [MGL-PAX](https://github.com/melisgl/mgl-pax).
+    - Feature A implemented."))

Github Workflow

It is generally recommended to commit generated readmes (see +40ants-doc-full/builder:update-asdf-system-docs) so that users have something to read +without reading the code and sites like github can display them.

HTML documentation can also be committed, but there is an issue with +that: when linking to the sources (see make-github-source-uri-fn), +the commit id is in the link. This means that code changes need to +be committed first, then HTML documentation regenerated and +committed in a followup commit.

To serve static documentation, use gh-pages. +You can use a separate branch gh-pages, or point GitHub Pages +to a docs folder inside the main branch. +Good description of this process is +http://sangsoonam.github.io/2019/02/08/using-git-worktree-to-deploy-github-pages.html. +Two commits needed still, but it is somewhat less painful.

This way the HTML documentation will be available at +http://<username>.github.io/<repo-name>. It is probably a good +idea to add section like the Links section to allow jumping +between the repository and the gh-pages site.

function
asdf-system &key github-uri git-version

Return a function suitable as :SOURCE-URI-FN of +the 40ants-doc-full/builder:render-to-files function. The function looks the source +location of the reference passed to it, and if the location is +found, the path is made relative to the root directory of +ASDF-SYSTEM and finally an URI pointing to github is returned. The +URI looks like this:

https://github.com/melisgl/mgl-pax/blob/master/src/pax-early.lisp#L12
+

"master" in the above link comes from GIT-VERSION.

If GIT-VERSION is NIL, then an attempt is made to determine to +current commit id from the .git in the directory holding +ASDF-SYSTEM. If no .git directory is found, then no links to +github will be generated.

If GITHUB-URI argument is not given, function will try to +get URL from ASDF system's description. To make this work, +your system description should look like this:

(defsystem 40ants-doc
+  ...
+  :source-control (:git "https://github.com/40ants/doc")
+  ...))))

A separate warning is signalled whenever source location lookup +fails or if the source location points to a directory not below the +directory of ASDF-SYSTEM.

Set this to a function of one argument.

The argument of this function will be a 40ants-doc/reference:reference +object and the result should be a full URL leading to the web page where +referenced object can be viewed. Usually this is a GitHub's page.

When you are using 40ants-doc-full/builder:update-asdf-system-docs, +this variable will be automatically bound to the result of +40ants-doc-full/github:make-github-source-uri-fn function call if +ASDF system has a :SOURCE-CONTROL slot.

See 40ants-doc-full/github:make-github-source-uri-fn for details.

Returns URI for the reference object +if *source-uri-fn* is bound to a function.

PAX World

MGL-PAX supported a "World" which was a registry of documents, which can generate +cross-linked HTML documentation pages for all the registered +documents.

But I decided to drop this feature for now, because usually build libraries documentation +separately as part of their CI pipline.

If somebody want's cross referencing between different libraries, then instead +of building their docs simultaneously, I'd suggest to create an index of entities, +provided by libraries and to store them as a JSON file along with a library documentation.

This way it will be possible to enumerate such sources of cross references as usual URLs.

Such feature is not implemented in the 40ants-doc system yet, but probably it will be +useful for libraries built around the Weblocks. +If you want to help and implement the feature, please, let me know.

Markdown Support

The Markdown in docstrings is processed with the +3BMD library.

Indentation

Docstrings can be indented in any of the usual styles. +40ants-doc normalizes indentation by converting:

(defun foo ()
+  "This is
+   indented
+   differently")

to

(defun foo ()
+  "This is
+indented
+differently")

Docstrings in sources are indented in various ways which can easily +mess up markdown. To handle the most common cases leave the first +line alone, but from the rest of the lines strip the longest run of +leading spaces that is common to all non-blank lines."

Syntax highlighting

For syntax highlighting, github's fenced code +blocks markdown extension to mark up code +blocks with triple backticks is enabled so all you need to do is +write:

```elisp
+(defun foo ())
+```
+

to get syntactically marked up HTML output. The language tag, elisp in this example, +is optional and defaults to commonlisp.

Originally MGL-PAX used colorize for the syntax +highlighting, but 40ants-doc uses Highlight.js which is able to +guess code block language if it is not specified. To minimize HTML document's +static size, Hightlight.js is configured to support only these languages:

  • bash

  • css

  • json

  • yaml

  • plain-text

  • html

  • markdown

  • lisp

There is a separate README where you will find instructions on how to +support other languages.

Besides an automatic language detection, the other cool feature of Highlight.js +is it's support for different color themes. Here you can view all available themes: +https://highlightjs.org/static/demo/. +There is no easy way to choose color theme yet, but probably this will be a nice +feature for 40ants-doc.

MathJax

Displaying pretty mathematics in TeX format is supported via +MathJax. It can be done inline with $ like this:

$\int_0^\infty e^{-x^2} dx=\frac{\sqrt{\pi}}{2}$
+

which is diplayed as $\int_0^\infty e^{-x^2} +dx=\frac{\sqrt{\pi}}{2}$, or it can be delimited by $$ like this:

$$\int_0^\infty e^{-x^2} dx=\frac{\sqrt{\pi}}{2}$$
+

to get: $$\int_0^\infty e^{-x^2} dx=\frac{\sqrt{\pi}}{2}$$

MathJax will leave code blocks (including those inline with +backticks) alone. Outside code blocks, escape $ by prefixing it +with a backslash to scare MathJax off.

Escaping all those backslashes in TeX fragments embedded in Lisp +strings can be a pain. Pythonic String +Reader can help +with that.

Documentation Printer Variables

Docstrings are assumed to be in markdown format and they are pretty +much copied verbatim to the documentation subject to a few knobs +described below.

Note, some of these variables might be not supported yet in this fork.

When true, words with at least three characters and no lowercase +characters naming an interned symbol are assumed to be code as if +they were marked up with backticks which is especially useful when +combined with 40ants-doc-full/link:*document-link-code*. For example, this docstring:

"`FOO` and FOO."
+

is equivalent to this:

"`FOO` and `FOO`."
+

if FOO is an interned symbol.

When true, during the process of generating documentation for a +40ants-doc:section class, HTML anchors are added before the documentation of +every reference that's not to a section. Also, markdown style +reference links are added when a piece of inline code found in a +docstring refers to a symbol that's referenced by one of the +sections being documented. Assuming BAR is defined, the +documentation for:

(defsection @foo
+  (foo function)
+  (bar function))
+
+(defun foo (x)
+  "Calls `BAR` on `X`."
+  (bar x))

would look like this:

- [function] FOO X
+
+    Calls [`BAR`][1] on `X`.
+

Instead of BAR, one can write [bar][] or [`bar`][] as well. +Since symbol names are parsed according to READTABLE-CASE, character +case rarely matters.

Now, if BAR has references with different locatives:

(defsection @foo
+  (foo function)
+  (bar function)
+  (bar type))
+
+(defun foo (x)
+  "Calls `BAR` on `X`."
+  (bar x))

then documentation would link to all interpretations:

- [function] FOO X
+
+    Calls `BAR`([`1`][link-id-1] [`2`][link-id-2]) on `X`.
+

This situation occurs with 40ants-doc:section which is both a class (see +40ants-doc:section class) and a locative type denoted by a symbol (see +40ants-doc/locatives:section locative). Back in the example above, clearly, +there is no reason to link to type BAR, so one may wish to select +the function locative. There are two ways to do that. One is to +specify the locative explicitly as the id of a reference link:

"Calls [BAR][function] on X."
+

However, if in the text there is a locative immediately before or +after the symbol, then that locative is used to narrow down the +range of possibilities. This is similar to what the M-. extension +does. In a nutshell, if M-. works without questions then the +documentation will contain a single link. So this also works without +any markup:

"Calls function `BAR` on X."
+

This last option needs backticks around the locative if it's not a +single symbol.

Note that *DOCUMENT-LINK-CODE* can be combined with +40ants-doc-full/builder/printer:*document-uppercase-is-code* to have links generated for +uppercase names with no quoting required.

A non-negative integer. In their hierarchy, sections on levels less +than this value get numbered in the format of 3.1.2. Setting it to +0 turns numbering off.

Is not supported yet.

Locative Types

These are the locatives type supported out of the box. As all +locative types, they are symbols and their names should make it +obvious what kind of things they refer to. Unless otherwise noted, +locatives take no arguments.

This package holds all symbols denoting 40ants-doc locatives.

It serves for a forward declaration of supported locatives. +To build documentation you'll need to load the 40ants-doc-full system +which includes methods supporting these locatives.

Refers to an asdf system. The generated documentation will include +meta information extracted from the system definition. This also +serves as an example of a symbol that's not accessible in the +current package and consequently is not exported.

A title of the documentation section can be modified if you'll +define a method for 40ants-doc/locatives/asdf-system:asdf-system-documentation-title generic-function. +Use EQL specifier for the method.

Returns a title for a section describing an ASDF system.

You might want to define a method using EQL specializer +to make a title shorter or to remove a system name from it.

Refers to a global special variable. INITFORM, or if not specified, +the global value of the variable is included in the documentation.

Refers to a DEFCONSTANT. INITFORM, or if not specified, +the value of the constant is included in the documentation.

Note that the arglist in the generated documentation depends on +the quality of SWANK-BACKEND:ARGLIST. It may be that default +values of optional and keyword arguments are missing.

locative
method-qualifiers method-specializers

See CL:FIND-METHOD for the description of the arguments. +To refer to the default method of the three argument generic +function FOO:

(foo (method () (t t t)))

To refer to an accessor named FOO-SLOT of class +FOO:

(foo-slot (accessor foo))

To refer to a reader named FOO-SLOT of class +FOO:

(foo-slot (reader foo))

To refer to a writer named FOO-SLOT of class +FOO:

(foo-slot (writer foo))

This is a synonym of function with the difference that the often +ugly and certainly uninformative lambda list will not be printed.

type can refer to classes as well, but it's better style to use the +more specific class locative type for that. Another difference to +class is that an attempt is made at printing the arguments of type +specifiers.

Refers to a symbol in a non-specific context. Useful for preventing +autolinking. For example, if there is a function called FOO then

`FOO`
+

will be linked to (if 40ants-doc-full/link:*document-link-code*) its definition. However,

[`FOO`][dislocated]
+

will not be. On a dislocated locative function 40ants-doc/locatives/base:locate always fails with a +40ants-doc/locatives/base:locate-error (1 2) condition.

An alias for 40ants-doc/locatives:dislocated, so the one can refer to an argument of a +macro without accidentally linking to a class that has the same name +as that argument. In the following example, FORMAT may link to +CL:FORMAT (if we generated documentation for it):

"See the FORMAT in DOCUMENT."

Since argument is a locative, we can prevent that linking by writing:

"See the FORMAT argument of DOCUMENT."

This is the locative for locatives. When M-. is pressed on +variable in (VARIABLE LOCATIVE), this is what makes it possible +to land at the (40ANTS-DOC/LOCATIVES/BASE:DEFINE-LOCATIVE-TYPE VARIABLE ...) form. +Similarly, (LOCATIVE LOCATIVE) leads to this very definition.

Refers to a region of a file. SOURCE can be a string or a +pathname in which case the whole file is being pointed to or it can +explicitly supply START, END locatives. include is typically used to +include non-lisp files in the documentation (say markdown or elisp +as in the next example) or regions of lisp source files. This can +reduce clutter and duplication.

(defsection example-section ()
+  (pax.el (include #.(asdf:system-relative-pathname :40ants-doc "elisp/pax.el")
+                   :lang "elisp"))
+  (foo-example (include (:start (foo function)
+                         :end (end-of-foo-example variable))
+                        :lang "commonlisp")))
+
+(defun foo (x)
+  (1+ x))
+
+;;; Since file regions are copied verbatim, comments survive.
+(defmacro bar ())
+
+;;; This comment is the last thing in FOO-EXAMPLE's
+;;; documentation since we use the dummy END-OF-FOO-EXAMPLE
+;;; variable to mark the end location.
+(defvar end-of-foo-example)
+
+;;; More irrelevant code follows.

In the above example, pressing M-. on pax.el will open the +src/pax.el file and put the cursor on its first character. M-. +on FOO-EXAMPLE will go to the source location of the (asdf:system +locative) locative.

When documentation is generated, the entire pax.el file is +included in the markdown as a code block. The documentation of +FOO-EXAMPLE will be the region of the file from the source location +of the START locative (inclusive) to the source location of the END +locative (exclusive). START and END default to the beginning and end +of the file, respectively.

Note that the file of the source location of :START and :END must be +the same. If SOURCE is pathname designator, then it must be absolute +so that the locative is context independent.

Creates a block containing output of a given form. +Also, an optional :LANG argument may be specified. +This could be useful when you want to show the results +of some code's evaluation.

Here is an example of the usage:

(defsection @example ()
+ (describe-output (stdout-of (format t "Hello World!"))))

Resulting block, rendered to Markdown format will look like:

```markdown
+Hello World!
+```
+
macro
symbol lambda-list &body docstring

A definer macro to hang the documentation of a restart on a +symbol.

(define-restart my-ignore-error ()
+  "Available when MY-ERROR is signalled, MY-IGNORE-ERROR unsafely continues.")

Note that while there is a CL:RESTART class, there is no +corresponding source location or docstring like for conditions.

macro
name (&key title (discard-documentation-p 40ants-doc:\*discard-documentation-p\*)) docstring

Define a global variable with NAME and set it to a glossary term +object. A glossary term is just a symbol to hang a docstring on. It +is a bit like a 40ants-doc:section in that, when linked to, its TITLE will be +the link text instead of the name of the symbol. Unlike sections +though, glossary terms are not rendered with headings, but in the +more lightweight bullet + locative + name/title style.

When DISCARD-DOCUMENTATION-P (defaults to 40ants-doc:*discard-documentation-p*) +is true, DOCSTRING will not be recorded to save memory.

There is also a helper function to compare locatives:

Compares two locatives.

Each locative may be a symbol or a locative with arugments in a list form.

Extension API

Defining a Custom Theme

Out of the box, 40ants-doc system supports three color themes:

You can pass these names as THEME argument to the 40ants-doc-full/builder:render-to-files +function. Or you can pass a contructed theme object instead of a symbolic class name.

And of cause, you can define your own theme!

Theme allows to control HTML page rendering, colors and code highlighting.

Changing Colors

The simplest way to customize theme is to redefine some colors using CSS. +Here is how to set orange page background:

(defclass my-theme (default-theme)
+  ())
+
+(defmethod 40ants-doc-full/themes/api:render-css ((theme my-theme))
+  (concatenate
+   'string
+   (call-next-method)
+  
+   (lass:compile-and-write
+    `(body
+      :background orange))))

Also you might want to redefine a color theme for code highlighter:

(defmethod 40ants-doc-full/themes/api:highlight-theme ((theme my-theme))
+  "atom-one-light")

Talking about code highlighting, you can also redefine a list of +languages to highlight:

(defmethod 40ants-doc-full/themes/api:highlight-languages ((theme my-theme))
+  (list "lisp"
+        "python"
+        "bash"))

Changing Page Layout

The main entry-point for page rendering is +render-page generic-function. It calls all other +rendering functions.

If you are inheriting your theme class from 40ants-doc-full/themes/default:default-theme, +then rendering functions will be called in the following order:

On this page stripes on the right demonstrate order in which different rendering functions will be called:

Some of these methods might call render-toc and +render-search-form to display a table of content +and a table form. Also, you might want to redefine render-html-head generic-function +to change html page metadata such as included stylesheets and js files, page title, etc.

If you want to introduce changes, it is better to inherit from existing theme class +and to define a few methods to change only needed properties. For example, here is +a theme I've made for all 40Ants projects. I've added header, footer and made colors match +the main site.

Available Themes

Theme Definition Protocol

Returns a list of languages to highlight in snippets. Each language should be supported by Highlight.js.

Deprecated! will be removed after 2024-11-13. +Pass languages and highlight theme as arguments to highlighjs plugin.

Returns a string with the name of the Highlight.js color theme for highlighted snippets.

To preview themes, use this site: https://highlightjs.org/static/demo/

Deprecated! Will be removed after 2024-11-13. +Pass languages and highlight theme as arguments to highlighjs plugin.

Renders whole page using theme and callable CONTENT-FUNC.

Renders content of the HTML HEAD tag.

Renders whole page header. Does nothing by default.

Renders whole page footer. Does nothing by default.

Renders page's content. It can wrap content into HTML tags and should funcall CONTENT-FUNC without arguments.

Renders sidebar's header. Usually it contains a search input.

Renders sidebar's header. By default it contains a link to the 40ants-doc system.

Renders sidebar's content. By default it calls render-toc generic-function.

Renders documentation TOC.

Plugins API

40ants-doc themes support plugins. Plugins are small objects holding some configuration parameters and able to +inject additional content into documentation pages or able to copy some static files to the results directory.

By default, only highlightjs plugin is enabled, but you can pass a custom list of plugins when creating +a theme object. For example, here is how to can enable both Hightlight.js and MathJax plugins:

(defsection @index (:title "Example")
+  "MathJax example:
+
+   1. $a ne 0$
+   2. $x = {-b pm sqrt{b^2-4ac} over 2a}.$")
+
+(40ants-doc-full/builder:render-to-files
+ @index
+ :base-dir "/tmp/output/"
+ :theme (make-instance '40ants-doc-full/themes/light:light-theme
+                       :plugins (list
+                                 (highlightjs)
+                                 (mathjax))))

Returns a list of plugin objects which will be used to inject additional information into the pages.

Define a method for this function if your plugin need to some static assets to work.

TARGET-DIR argument is an absolute directory pathname pointing to the root of the site.

By default does nothing.

Plugins can define a method for this generic-function to add some code to the end of a page header.

Each method should return a string which will be inserted without "escaping" so +the plugin's responsibility to escape all user input's if necessary.

Does nothing by default.

Plugins can define a method for this generic-function to add some HTML before the main content of the page.

Each method should return a string which will be inserted without "escaping" so +the plugin's responsibility to escape all user input's if necessary.

Does nothing by default.

Plugins can define a method for this generic-function to add some HTML after the main content of the page.

Each method should return a string which will be inserted without "escaping" so +the plugin's responsibility to escape all user input's if necessary.

Does nothing by default.

Built-in Plugins

function
&key (languages \*default-languages\*) (theme \*default-theme\*)

Creates a Highlightjs plugin.

You can redefine languages list and color theme like this:

(make-instance '40ants-doc-full/themes/light:light-theme
+               :plugins (list
+                         (highlightjs :theme "magula"
+                                      :languages '("lisp" "python"))))

Locatives and References

While Common Lisp has rather good introspective abilities, not +everything is first class. For example, there is no object +representing the variable defined with (DEFVAR +FOO). (40ANTS-DOC/REFERENCE:MAKE-REFERENCE 'FOO 'VARIABLE) constructs a 40ants-doc/reference:reference that +captures the path to take from an object (the symbol FOO) to an +entity of interest (for example, the documentation of the variable). +The path is called the locative. A locative can be applied to an +object like this:

(locate 'foo 'variable)

which will return the same reference as (40ANTS-DOC/REFERENCE:MAKE-REFERENCE 'FOO +'VARIABLE). Operations need to know how to deal with references +which we will see in 40ants-doc/locatives/base:locate-and-find-source (1 2).

Naturally, (40ANTS-DOC/LOCATIVES/BASE:LOCATE 'FOO 'FUNCTION) will simply return #'FOO, no +need to muck with references when there is a perfectly good object.

function
object locative &key (errorp t)

Follow LOCATIVE from OBJECT and return the object it leads to or a +40ants-doc/reference:reference if there is no first class object corresponding to the +location. If ERRORP, then a locate-error (1 2) condition is signaled when +the lookup fails.

Signaled by locate when the lookup fails and ERRORP +is true.

function
reference &key (errorp t)

A convenience function to 40ants-doc/locatives/base:locate REFERENCE's object with its +locative.

The first element of LOCATIVE if it's a list. If it's a symbol then +it's that symbol itself. Typically, methods of generic functions +working with locatives take locative type and locative args as +separate arguments to allow methods have eql specializers on the +type symbol.

The REST of LOCATIVE if it's a list. If it's a symbol then +it's ().

Adding New Object Types

If you wish to make it possible to render documentation for a new +object type, then you have to define a method for the +40ants-doc-full/commondoc/builder:to-commondoc generic function. +And to make M-. navigation work with new object types, a methods of +40ants-doc/locatives/base:locate-object generic-function and +40ants-doc/source-api:find-source generic-function are to be defined. +Also, additional method for 40ants-doc/reference-api:canonical-reference generic-function +need to be defined to make an opposite to 40ants-doc/locatives/base:locate-object's action.

Finally, 40ants-doc:exportable-locative-type-p generic-function +may be overridden if exporting does not makes sense. +Here is a stripped down example of how all this is done +for asdf:system:

(define-locative-type asdf:system ()
+  "Refers to an asdf system. The generated documentation will include
+  meta information extracted from the system definition. This also
+  serves as an example of a symbol that's not accessible in the
+  current package and consequently is not exported.
+
+  A title of the documentation section can be modified if you'll
+  define a method for 40ANTS-DOC/LOCATIVES/ASDF-SYSTEM:ASDF-SYSTEM-DOCUMENTATION-TITLE generic-function.
+  Use EQL specifier for the method.")
+
+
+(defun find-system (name)
+  "ASDF:FIND-SYSTEM is 1000 times slower than ASDF:REGISTERED-SYSTEM,
+   but REGISTERED-SYSTEM sometimes unable to find a system (for example
+   when this is a primary ASDF system, but it's defpackage defines
+   package with the name of primary system and a nickname equal to the
+   subsystem name. See log4cl-extras/core as example).
+
+   This we first try to use fast method and fallback to the slow one."
+  (or (asdf:registered-system name)
+      (asdf:find-system name)))
+
+
+(defmethod locate-object (symbol (locative-type (eql 'asdf:system))
+                          locative-args)
+  (assert (endp locative-args))
+  ;; FIXME: This is slow as hell.
+  ;; TODO: check if replacement of find-system with registered-system helped
+  (or (find-system symbol)
+      (locate-error)))
+
+(defmethod canonical-reference ((system asdf:system))
+  (40ants-doc/reference:make-reference (asdf:primary-system-name system)
+                                       'asdf:system))
+
+(defmethod find-source ((system asdf:system))
+  `(:location
+    (:file ,(namestring (asdf/system:system-source-file system)))
+    (:position 1)
+    (:snippet "")))
+
+(defmethod to-commondoc ((system asdf:system))
+  (let ((title (asdf-system-documentation-title system)))
+    (flet ((item (name getter &key type)
+             (let* ((value (funcall getter system))
+                    (href nil))
+               (when value
+                 (case type
+                   (:link (setf href value))
+                   (:mailto (setf href (format nil "mailto:~A"
+                                               value)))
+                   (:source-control (psetf value (format nil "~A"
+                                                         (first value))
+                                           href (second value))))
+                 (make-list-item
+                  (make-paragraph
+                   (cond
+                     ((eql type :asdf-systems)
+                      (make-content
+                       (list*
+                        (make-text
+                         (format nil "~A: "
+                                 name))
+                        (loop with first = t
+                              for system-name in value
+                              if first
+                                do (setf first nil)
+                              else
+                                collect (make-text ", ")
+                              collect (make-web-link (format nil "https://quickdocs.org/~A"
+                                                             system-name)
+                                                     (make-text system-name))))))
+                     (href
+                      (make-content
+                       (list (make-text
+                              (format nil "~A: "
+                                      name))
+                             (make-web-link href
+                                            (make-text value)))))
+                     (t
+                      (make-text
+                       (format nil "~A: ~A"
+                               name
+                               value))))))))))
+      
+      (let* ((items (list (item "Version" 'asdf/component:component-version)
+                          (item "Description" 'asdf/system:system-description)
+                          (item "Licence" 'asdf/system:system-licence)
+                          (item "Author" 'asdf/system:system-author)
+                          (item "Maintainer" 'asdf/system:system-maintainer)
+                          (item "Mailto" 'asdf/system:system-mailto
+                                :type :mailto)
+                          (item "Homepage" 'asdf/system:system-homepage
+                                :type :link)
+                          (item "Bug tracker" 'asdf/system:system-bug-tracker
+                                :type :link)
+                          (item "Source control" 'asdf/system:system-source-control
+                                :type :source-control)
+                          (item "Depends on" 'asdf-system-dependencies
+                                :type :asdf-systems)))
+             (children (make-unordered-list
+                        (remove nil items)))
+             (reference (40ants-doc/reference-api:canonical-reference system)))
+        (make-section-with-reference title
+                                     children
+                                     reference)))))
+
+
macro
locative-type lambda-list &body docstring

Declare locative-type as a locative. One gets two +things in return: first, a place to document the format and +semantics of locative-type (in LAMBDA-LIST and DOCSTRING); second, +being able to reference (LOCATIVE-TYPE LOCATIVE). For example, if +you have:

(define-locative-type variable (&optional initform)
+  "Dummy docstring.")

then (VARIABLE LOCATIVE) refers to this form.

Return true if symbols in references with +LOCATIVE-TYPE are to be exported when they occur in a +defsection having :EXPORT t argument. The default method returns T, while the methods for +package, asdf:system and method return NIL.

defsection calls this function to decide what symbols to export when +its EXPORT argument is true.

Return the object, to which OBJECT and the locative +refer. For example, if LOCATIVE-TYPE is the symbol package, this +returns (FIND-PACKAGE SYMBOL). Signal a locate-error (1 2) condition by +calling the locate-error function if the lookup fails. Signal other +errors if the types of the argument are bad, for instance +LOCATIVE-ARGS is not the empty list in the package example. If a +40ants-doc/reference:reference is returned then it must be canonical in the sense that +calling 40ants-doc/reference-api:canonical-reference on it will return the same reference. +For extension only, don't call this directly.

Call this function to signal a locate-error (1 2) condition from a +locate-object generic-function. FORMAT-AND-ARGS contains a format string and +args suitable for FORMAT from which the locate-error-message is +constructed. If FORMAT-AND-ARGS is NIL, then the message will be NIL +too.

The object and the locative are not specified, they are added by +locate when it resignals the condition.

Like SWANK:FIND-DEFINITION-FOR-THING, but this +one is a generic function to be extensible. In fact, the default +implementation simply defers to SWANK:FIND-DEFINITION-FOR-THING. +This function is called by 40ants-doc-full/swank:locate-definition-for-emacs which lies +behind the M-. extension (see Emacs Integration).

If successful, the return value looks like this:

(:location (:file "/home/mega/own/mgl/pax/test/test.lisp")
+           (:position 24) nil)

The NIL is the source snippet which is optional. Note that position +1 is the first character. If unsuccessful, the return values is +like:

(:error "Unknown source location for SOMETHING")

Define methods for this generic function to render object's +documentation into an intermediate CommonDoc format.

Function should return a COMMON-DOC:DOCUMENT-NODE.

To show a standard documentation item with locative, +name and arguments, use 40ants-doc-full/commondoc/bullet:make-bullet +function.

function
reference &key arglist children name ignore-words dislocated-symbols

Creates a CommonDoc node to represent a documentation item.

Documentation item can have an ARGLIST. If NAME is not given, +then it will be made from reference's object printed representation.

You can provide a CHILDREN arguments. It should be a list of CommonDoc nodes +or a single node.

IGNORE-WORDS can be a list with the same meaning as 40ants-doc:defsection.

If you want to completely ignore some symbol inside the reference's documentation, +then use DISPLOCATED-SYMBOLS argument.

generic-function
node func &key on-going-down on-going-up

Recursively replaces or modifies a CommonDoc NODE with results of the FUNC call.

We have to use this function because some common-doc node types +supporting COMMON-DOC:CHILDREN do not share a common type.

This macro tracks current documentation piece's package and sets package accordingly.

Reference Based Extensions

Let's see how to extend 40ants-doc-full/builder:render-to-files and M-. navigation if there is +no first class object to represent the thing of interest. Recall +that 40ants-doc/locatives/base:locate returns a 40ants-doc/reference:reference object in this case:

(40ants-doc/locatives/base:locate
+   '40ants-doc:*discard-documentation-p*
+   'variable)
+==> #<40ANTS-DOC/REFERENCE:REFERENCE 40ANTS-DOC:*DISCARD-DOCUMENTATION-P* (VARIABLE)>

Some methods of 40ants-doc/source-api:find-source generic-function defer to +40ants-doc/locatives/base:locate-and-find-source generic-function, +which have LOCATIVE-TYPE in their argument +list for EQL specializing pleasure.

Here is a stripped down example of how the variable locative is defined. +Pay attention how it defines a method of +40ants-doc-full/commondoc/builder:reference-to-commondoc generic-function instead of +40ants-doc-full/commondoc/builder:to-commondoc. This is because we have no +a lisp object to represent a variable and have to specialize method on +LOCATIVE-TYPE argument:

(define-locative-type variable (&optional initform)
+  "Refers to a global special variable. INITFORM, or if not specified,
+  the global value of the variable is included in the documentation.")
+
+(defmethod locate-object (symbol (locative-type (eql 'variable)) locative-args)
+  (assert (<= (length locative-args) 1))
+  (40ants-doc/reference:make-reference symbol (cons locative-type locative-args)))
+
+
+(defmethod 40ants-doc-full/commondoc/builder:reference-to-commondoc ((symbol symbol) (locative-type (eql 'variable)) locative-args)
+  (destructuring-bind (&optional (initform nil initformp)) locative-args
+    (let* ((reference (canonical-reference
+                       (40ants-doc/reference:make-reference symbol
+                                                            (cons locative-type
+                                                                  locative-args))))
+           (docstring (40ants-doc/docstring:get-docstring symbol 'variable))
+           (arglist (multiple-value-bind (value unboundp) (40ants-doc-full/utils::symbol-global-value symbol)
+                      (cond (initformp
+                             (prin1-to-string initform))
+                            (unboundp "-unbound-")
+                            (t
+                             (prin1-to-string value)))))
+           (children (when docstring
+                       (parse-markdown docstring))))
+
+      (40ants-doc-full/commondoc/bullet:make-bullet reference
+                                                    :arglist arglist
+                                                    :children children
+                                                    :dislocated-symbols symbol))))
+
+(defmethod locate-and-find-source (symbol (locative-type (eql 'variable))
+                                   locative-args)
+  (declare (ignore locative-args))
+  (40ants-doc-full/locatives/utils::find-one-location (swank-backend:find-definitions symbol)
+                                                      '("variable" "defvar" "defparameter"
+                                                        "special-declaration")))
+
+

If REFERENCE can be resolved to a non-reference, call 40ants-doc/source-api:find-source generic-function +with it, else call 40ants-doc/locatives/base:locate-and-find-source on the object, +locative-type, locative-args slots of REFERENCE.

Called by 40ants-doc/source-api:find-source +on 40ants-doc/reference:reference objects, this +function has essentially the same purpose as 40ants-doc/source-api:find-source generic-function but it has +different arguments to allow specializing on LOCATIVE-TYPE.

This default implementation simply calls 40ants-doc/source-api:find-source (1 2) with OBJECT +which should cover the common case of a macro expanding to, for +instance, a defun but having its own locative type.

Define a method for this generic function, when there is no +a lisp object to represent an object of given locative type.

LOCATIVE-TYPE argument will be a symbol. OBJ argument also usually a symbol. +LOCATIVE-ARGS argument is a list which will be non-nil in case if +object is referenced in a 40ants-doc:defsection like this:

(40ants-doc/source-api:find-source (method () (40ants-doc/reference:reference)))

In this case LOCATIVE-ARGS argument will be '(NIL (40ANTS-DOC/REFERENCE:REFERENCE)).

We have covered the basic building blocks of reference based +extensions. Now let's see how the obscure +define-symbol-locative-type and +define-definer-for-symbol-locative-type macros work together to +simplify the common task of associating definition and documentation +with symbols in a certain context.

Similar to 40ants-doc/locatives/base:define-locative-type but it assumes that all things +locatable with LOCATIVE-TYPE are going to be just symbols defined +with a definer defined with 40ants-doc/locatives/define-definer:define-definer-for-symbol-locative-type. +It is useful to attach documentation and source location to symbols +in a particular context. An example will make everything clear:

(define-symbol-locative-type direction ()
+  "A direction is a symbol. (After this `M-.` on `DIRECTION LOCATIVE`
+                                   works and it can also be included in DEFSECTION forms.)")
+
+(define-definer-for-symbol-locative-type define-direction direction
+  "With DEFINE-DIRECTION one can document what a symbol means when
+interpreted as a direction.")
+
+(define-direction up ()
+  "UP is equivalent to a coordinate delta of (0, -1).")

After all this, (UP DIRECTION) refers to the DEFINE-DIRECTION +form above.

Define a macro with NAME which can be used to attach documentation, +a lambda-list and source location to a symbol in the context of +LOCATIVE-TYPE. The defined macro's arglist is (SYMBOL LAMBDA-LIST +&OPTIONAL DOCSTRING). LOCATIVE-TYPE is assumed to have been defined +with 40ants-doc-full/locatives/definers:define-symbol-locative-type.

Sections

40ants-doc:section objects rarely need to be dissected since +40ants-doc:defsection and 40ants-doc-full/builder:render-to-files cover most needs. However, it is plausible +that one wants to subclass them and maybe redefine how they are +presented.

defsection stores its :NAME, :TITLE, :PACKAGE, +:READTABLE and :ENTRIES in section objects.

The name of the global variable whose value is +this section object.

*PACKAGE* will be bound to this package when +generating documentation for this section.

*READTABLE* will be bound to this when generating +documentation for this section.

STRING or NIL. Used in generated documentation.

A 40ants-doc/reference:reference or NIL. Used in generated documentation.

A list of strings and 40ants-doc/reference:reference objects in the +order they occurred in defsection.

A list of strings with URLs of other system's documentation.

A list of strings to not warn about.

Transcripts

What are transcripts for? When writing a tutorial, one often wants +to include a REPL session with maybe a few defuns and a couple of +forms whose output or return values are shown. Also, in a function's +docstring an example call with concrete arguments and return values +speaks volumes. A transcript is a text that looks like a repl +session, but which has a light markup for printed output and return +values, while no markup (i.e. prompt) for lisp forms. The PAX +transcripts may include output and return values of all forms, or +only selected ones. In either case the transcript itself can be +easily generated from the source code.

The main worry associated with including examples in the +documentation is that they tend to get out-of-sync with the code. +This is solved by being able to parse back and update transcripts. +In fact, this is exactly what happens during documentation +generation with PAX. Code sections tagged cl-transcript are +retranscribed and checked for inconsistency (that is, any difference +in output or return values). If the consistency check fails, an +error is signalled that includes a reference to the object being +documented.

Going beyond documentation, transcript consistency checks can be +used for writing simple tests in a very readable form. For example:

(+ 1 2)
+=> 3
+
+(values (princ :hello) (list 1 2))
+.. HELLO
+=> :HELLO
+=> (1 2)

All in all, transcripts are a handy tool especially when combined +with the Emacs support to regenerate them and with +PYTHONIC-STRING-READER and its triple-quoted strings that allow one +to work with nested strings with less noise. The triple-quote syntax +can be enabled with:

(in-readtable pythonic-string-syntax)
+

Transcribing with Emacs

Typical transcript usage from within Emacs is simple: add a lisp +form to a docstring or comment at any indentation level. Move the +cursor right after the end of the form as if you were to evaluate it +with C-x C-e. The cursor is marked by #\^:

This is part of a docstring.
+
+```cl-transcript
+(values (princ :hello) (list 1 2))^
+```
+

Note that the use of fenced code blocks with the language tag +cl-transcript is only to tell PAX to perform consistency checks at +documentation generation time.

Now invoke the emacs command mgl-pax-transcribe-last-expression where the cursor +is and the fenced code block from the docstring becomes:

(values (princ :hello) (list 1 2))
+.. HELLO
+=> :HELLO
+=> (1 2)
+^
+

Then you change the printed message to :HELLO-WORLD and add a comment to the second +return value:

(values (princ :hello-world) (list 1 2))
+.. HELLO
+=> :HELLO
+=> (1
+    ;; This value is arbitrary.
+    2)
+

When generating the documentation you get a +a warning:

WARNING:
+   Transcription error. Inconsistent output found.
+
+Source:
+   "HELLO"
+
+Output:
+   "HELLO-WORLD"
+
+Form:
+   "(values (princ :hello-world) (list 1 2))"
+

because the printed output and the +first return value changed so you regenerate the documentation by +marking the region of bounded by | and the cursor at ^ in +the example:

|(values (princ :hello-world) (list 1 2))
+.. HELLO
+=> :HELLO
+=> (1
+    ;; This value is arbitrary.
+    2)
+^
+

then invoke the emacs command 40ants-doc-retranscribe-region to get:

(values (princ :hello-world) (list 1 2))
+.. HELLO-WORLD
+=> :HELLO-WORLD
+=> (1
+    ;; This value is arbitrary.
+    2)
+^
+

Note how the indentation and the comment of (1 2) was left alone +but the output and the first return value got updated.

Alternatively, C-u 1 40ants-doc-transcribe-last-expression will emit commented markup:

(values (princ :hello) (list 1 2))
+;.. HELLO
+;=> :HELLO
+;=> (1 2)
+

This can be useful for producing results outside of the docstrings.

C-u 0 40ants-doc-retranscribe-region will turn commented into +non-commented markup. In general, the numeric prefix argument is the +index of the syntax to be used in 40ants-doc-full/transcribe:*syntaxes*. Without a +prefix argument 40ants-doc-retranscribe-region will not change the +markup style.

Finally, not only do both functions work at any indentation level, +but in comments too:

;;;; (values (princ :hello) (list 1 2))
+;;;; .. HELLO
+;;;; => :HELLO
+;;;; => (1 2)
+

Transcription support in emacs can be enabled by adding this to your +Emacs initialization file (or loading elisp/transcribe.el):

;;; Code transcription
+
+(defun 40ants-doc-lisp-eval (form)
+  (cond
+   ((and (fboundp 'sly-connected-p)
+         (sly-connected-p))
+    (sly-eval form))
+   ((and (fboundp 'slime-connected-p)
+         (slime-connected-p))
+    (slime-eval form))
+   (t
+    (error "Nor SLY, nor SLIME is connected to the Lisp."))))
+
+
+(defun 40ants-doc-transcribe-last-expression ()
+  "A bit like C-u C-x C-e (slime-eval-last-expression) that
+inserts the output and values of the sexp before the point, this
+does the same but with 40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE. Use a numeric prefix
+argument as in index to select one of the Common Lisp
+40ANTS-DOC-FULL/TRANSCRIBE:*SYNTAXES* as the SYNTAX argument to 40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE.
+Without a prefix argument, the first syntax is used."
+  (interactive)
+  (insert
+   (save-excursion
+     (let* ((end (point))
+            (start (progn (backward-sexp)
+                          (move-beginning-of-line nil)
+                          (point))))
+       (40ants-doc-transcribe start end (40ants-doc-transcribe-syntax-arg)
+                           nil nil nil)))))
+
+(defun 40ants-doc-retranscribe-region (start end)
+  "Updates the transcription in the current region (as in calling
+40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE with :UPDATE-ONLY T). Use a numeric prefix
+argument as in index to select one of the Common Lisp
+40ANTS-DOC-FULL/TRANSCRIBE:*SYNTAXES* as the SYNTAX argument to 40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE.
+Without a prefix argument, the syntax of the input will not be
+changed."
+  (interactive "r")
+  (let ((point-at-start-p (= (point) start)))
+    ;; We need to extend selection to the
+    ;; beginning of line because otherwise
+    ;; block's indentation might be wrong and
+    ;; transcription parsing will fail
+    (goto-char start)
+    (move-beginning-of-line nil)
+    (setf start
+          (point))
+    
+    (let ((transcript (40ants-doc-transcribe start end
+                                          (40ants-doc-transcribe-syntax-arg)
+                                          t t nil)))
+      (if point-at-start-p
+          (save-excursion
+            (goto-char start)
+            (delete-region start end)
+            (insert transcript))
+        (save-excursion
+          (goto-char start)
+          (delete-region start end))
+        (insert transcript)))))
+
+(defun 40ants-doc-transcribe-syntax-arg ()
+  (if current-prefix-arg
+      (prefix-numeric-value current-prefix-arg)
+    nil))
+
+(defun 40ants-doc-transcribe (start end syntax update-only echo
+                                    first-line-special-p)
+  (let ((transcription
+         (40ants-doc-lisp-eval
+          `(cl:if (cl:find-package :40ants-doc-full/transcribe)
+                  (uiop:symbol-call :40ants-doc-full/transcribe :transcribe-for-emacs
+                                    ,(buffer-substring-no-properties start end)
+                                    ',syntax ',update-only ',echo ',first-line-special-p)
+                  t))))
+    (if (eq transcription t)
+        (error "40ANTS-DOC is not loaded.")
+      transcription)))
+
+

Transcript API

function
input output &key update-only (include-no-output update-only) (include-no-value update-only) (echo t) check-consistency default-syntax (input-syntaxes \*syntaxes\*) (output-syntaxes \*syntaxes\*)

Read forms from INPUT and write them (if ECHO) to OUTPUT +followed by any output and return values produced by calling EVAL on +the form. INPUT can be a stream or a string, while OUTPUT can be a +stream or NIL in which case transcription goes into a string. The +return value is the OUTPUT stream or the string that was +constructed.

A simple example is this:

(transcribe "(princ 42) " nil)
+=> "(princ 42)
+.. 42
+=> 42
+"

However, the above may be a bit confusing since this documentation +uses transcribe markup syntax in this very example, so let's do it +differently. If we have a file with these contents:

(values (princ 42) (list 1 2))

it is transcribed to:

(values (princ 42) (list 1 2))
+.. 42
+=> 42
+=> (1 2)

Output to all standard streams is captured and printed with +the :OUTPUT prefix (".."). The return values above are printed +with the :READABLE prefix ("=>"). Note how these prefixes are +always printed on a new line to facilitate parsing.

Updating

transcribe is able to parse its own output. If we transcribe the +previous output above, we get it back exactly. However, if we remove +all output markers, leave only a placeholder value marker and +pass :UPDATE-ONLY T with source:

(values (princ 42) (list 1 2))
+=>

we get this:

(values (princ 42) (list 1 2))
+=> 42
+=> (1 2)

With UPDATE-ONLY, printed output of a form is only transcribed if +there were output markers in the source. Similarly, with +UPDATE-ONLY, return values are only transcribed if there were value +markers in the source.

No Output/Values

If the form produces no output or returns no values, then whether or +not output and values are transcribed is controlled by +INCLUDE-NO-OUTPUT and INCLUDE-NO-VALUE, respectively. By default, +neither is on so:

(values)
+..
+=>

is transcribed to

(values)

With UPDATE-ONLY true, we probably wouldn't like to lose those +markers since they were put there for a reason. Hence, with +UPDATE-ONLY, INCLUDE-NO-OUTPUT and INCLUDE-NO-VALUE default to true. +So with UPDATE-ONLY the above example is transcribed to:

(values)
+..
+=> ; No value

where the last line is the :NO-VALUE prefix.

Consistency Checks

If CHECK-CONSISTENCY is true, then transcribe signals a continuable +transcription-output-consistency-error whenever a form's output as a +string is different from what was in INPUT, provided that INPUT +contained the output. Similary, for values, a continuable +transcription-values-consistency-error is signalled if a value read +from the source does not print as the as the value returned by EVAL. +This allows readable values to be hand-indented without failing +consistency checks:

(list 1 2)
+=> (1
+      2)

Unreadable Values

The above scheme involves READ, so consistency of unreadable values +cannot be treated the same. In fact, unreadable values must even be +printed differently for transcribe to be able to read them back:

(defclass some-class () ())
+
+(defmethod print-object ((obj some-class) stream)
+  (print-unreadable-object (obj stream :type t)
+    (format stream \"~%~%end\")))
+
+(make-instance 'some-class)
+==> #<SOME-CLASS 
+-->
+--> end>

where "==>" is the :UNREADABLE prefix and "-->" is +the :UNREADABLE-CONTINUATION prefix. As with outputs, a consistency +check between an unreadable value from the source and the value from +EVAL is performed with STRING=. That is, the value from EVAL is +printed to a string and compared to the source value. Hence, any +change to unreadable values will break consistency checks. This is +most troublesome with instances of classes with the default +PRINT-OBJECT method printing the memory address. There is currently +no remedy for that, except for customizing PRINT-OBJECT or not +transcribing that kind of stuff.

Syntaxes

Finally, a transcript may employ different syntaxes for the output +and values of different forms. When INPUT is read, the syntax for +each form is determined by trying to match all prefixes from all +syntaxes in INPUT-SYNTAXES against a line. If there are no output or +values for a form in INPUT, then the syntax remains undetermined.

When OUTPUT is written, the prefixes to be used are looked up in +DEFAULT-SYNTAX of OUTPUT-SYNTAXES, if DEFAULT-SYNTAX is not NIL. If +DEFAULT-SYNTAX is NIL, then the syntax used by the same form in the +INPUT is used or (if that could not be determined) the syntax of the +previous form. If there was no previous form, then the first syntax +if OUTPUT-SYNTAXES is used.

To produce a transcript that's executable Lisp code, +use :DEFAULT-SYNTAX :COMMENTED-1:

(make-instance 'some-class)
+;==> #<SOME-CLASS
+;-->
+;--> end>
+
+(list 1 2)
+;=> (1
+;->    2)

To translate the above to uncommented syntax, +use :DEFAULT-SYNTAX :DEFAULT. If DEFAULT-SYNTAX is NIL (the +default), the same syntax will be used in the output as in the input +as much as possible.

variable
((:DEFAULT (:OUTPUT "..") (:NO-VALUE "=> ; No value") (:READABLE "=>") + (:UNREADABLE "==>") (:UNREADABLE-CONTINUATION "-->")) + (:COMMENTED-1 (:OUTPUT ";..") (:NO-VALUE ";=> ; No value") (:READABLE ";=>") + (:READABLE-CONTINUATION ";->") (:UNREADABLE ";==>") + (:UNREADABLE-CONTINUATION ";-->")) + (:COMMENTED-2 (:OUTPUT ";;..") (:NO-VALUE ";;=> ; No value") + (:READABLE ";;=>") (:READABLE-CONTINUATION ";;->") (:UNREADABLE ";;==>") + (:UNREADABLE-CONTINUATION ";;-->")))

The default syntaxes used by transcribe for reading and writing +lines containing output and values of an evaluated form.

A syntax is a list of of the form (SYNTAX-ID &REST PREFIXES) where +prefixes is a list of (PREFIX-ID PREFIX-STRING) elements. For +example the syntax :COMMENTED-1 looks like this:

(:commented-1
+ (:output ";..")
+ (:no-value ";=>  No value")
+ (:readable ";=>")
+ (:readable-continuation ";->")
+ (:unreadable ";==>")
+ (:unreadable-continuation ";-->"))

All of the above prefixes must be defined for every syntax except +for :READABLE-CONTINUATION. If that's missing (as in the :DEFAULT +syntax), then the following value is read with READ and printed with +PRIN1 (hence no need to mark up the following lines).

When writing, an extra space is added automatically if the line to +be prefixed is not empty. Similarly, the first space following the +prefix discarded when reading.

See transcribe for how the actual syntax to be used is selected.

Represents syntactic errors in the INPUT argument +of transcribe and also serves as the superclass of +transcription-consistency-error.

Signaled (with CERROR) by transcribe when invoked +with :CHECK-CONSISTENCY and the output of a form is not the same as +what was parsed.

Signaled (with CERROR) by transcribe when invoked +with :CHECK-CONSISTENCY and the values of a form are inconsistent +with their parsed representation.

TODO

  • Refactor code and make a core package with only a few dependencies.

  • Add warnings on UPPERCASED symbols in docstrings which aren't found in the package and can't be cross referenced.

  • Support SLY and make both SLIME and SLY integrations optional.

  • Add a search facility which will build an index for static file like Sphinx does.

  • Separate markup parsing and result rendering code to support markups other than Markdown and HTML.

  • Add a new section type to render ChangeLog.

  • Support custom HTML themes.

  • Generate RSS or Atom feed out of changelog items, defined with + 40ants-doc/changelog:defchangelog macro.

  • Make some warnings compile-time for defsection and show them in the Emacs, if possible.

+ + + +
+
+ + \ No newline at end of file diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..b0614034 --- /dev/null +++ b/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 00 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + + + + +var splitChars = (function() { + var result = {}; + var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648, + 1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702, + 2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971, + 2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345, + 3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761, + 3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823, + 4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125, + 8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695, + 11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587, + 43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141]; + var i, j, start, end; + for (i = 0; i < singles.length; i++) { + result[singles[i]] = true; + } + var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709], + [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161], + [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568], + [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807], + [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047], + [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383], + [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450], + [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547], + [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673], + [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820], + [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946], + [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023], + [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173], + [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332], + [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481], + [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718], + [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791], + [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095], + [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205], + [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687], + [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968], + [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869], + [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102], + [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271], + [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592], + [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822], + [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167], + [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959], + [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143], + [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318], + [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483], + [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101], + [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567], + [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292], + [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444], + [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783], + [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311], + [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511], + [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774], + [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071], + [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263], + [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519], + [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647], + [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967], + [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295], + [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274], + [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007], + [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381], + [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]]; + for (i = 0; i < ranges.length; i++) { + start = ranges[i][0]; + end = ranges[i][1]; + for (j = start; j <= end; j++) { + result[j] = true; + } + } + return result; +})(); + +function splitQuery(query) { + var result = []; + var start = -1; + for (var i = 0; i < query.length; i++) { + if (splitChars[query.charCodeAt(i)]) { + if (start !== -1) { + result.push(query.slice(start, i)); + start = -1; + } + } else if (start === -1) { + start = i; + } + } + if (start !== -1) { + result.push(query.slice(start)); + } + return result; +} + + diff --git a/references.json b/references.json new file mode 100644 index 00000000..b991f5a4 --- /dev/null +++ b/references.json @@ -0,0 +1 @@ +[{"URL":"https://40ants.com/doc/README.md#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40FULL-DOC-LINK-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@FULL-DOC-LINK","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/README.md#x-2840ANTS-DOC-FULL-2FDOC-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC:@README","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E1-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.1.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E2-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.2.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E3-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.3.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E4-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.4.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E4-2E1-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.4.1|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E1-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.1|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E2-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.2|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E3-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.3|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E4-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.4|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E5-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.5|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E6-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.6|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E7-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.7|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E5-2E8-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.5.8|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E6-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.6.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E7-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.7.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E8-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.8.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E9-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.9.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E9-2E1-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.9.1|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E9-2E2-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.9.2|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E10-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.10.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E11-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.11.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E11-2E1-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.11.1|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E11-2E2-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.11.2|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E12-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.12.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E13-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.13.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E14-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.14.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E15-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.15.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E15-2E1-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.15.1|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E15-2E2-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.15.2|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E15-2E3-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.15.3|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E15-2E4-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.15.4|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E16-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.16.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E17-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.17.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E17-2E1-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.17.1|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E17-2E2-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.17.2|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E17-2E3-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.17.3|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-7C0-2E17-2E4-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::|0.17.4|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/changelog/#x-2840ANTS-DOC-2FCHANGELOG-3A-40CHANGELOG-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG:@CHANGELOG","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40TODO-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@TODO","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-VALUES-CONSISTENCY-ERROR-20CONDITION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIPTION-VALUES-CONSISTENCY-ERROR","LOCATIVE":"CONDITION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-OUTPUT-CONSISTENCY-ERROR-20CONDITION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIPTION-OUTPUT-CONSISTENCY-ERROR","LOCATIVE":"CONDITION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-CONSISTENCY-ERROR-20CONDITION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIPTION-CONSISTENCY-ERROR","LOCATIVE":"CONDITION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-ERROR-20CONDITION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIPTION-ERROR","LOCATIVE":"CONDITION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3A-2ASYNTAXES-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE:*SYNTAXES*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIBE-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3A-3A-40TRANSCRIPT-API-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE::@TRANSCRIPT-API","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3A-3A-40TRANSCRIPT-EMACS-INTEGRATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE::@TRANSCRIPT-EMACS-INTEGRATION","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3A-3A-40TRANSCRIPT-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/TRANSCRIBE::@TRANSCRIPT","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-IGNORE-WORDS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-IGNORE-WORDS","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-EXTERNAL-DOCS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-EXTERNAL-DOCS","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-ENTRIES-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-ENTRIES","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-LINK-TITLE-TO-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-LINK-TITLE-TO","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-TITLE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-TITLE","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-READTABLE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-READTABLE","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-PACKAGE","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-NAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29","OBJECT":"40ANTS-DOC:SECTION-NAME","LOCATIVE":["READER","SECTION"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ASECTION-20CLASS-29","OBJECT":"40ANTS-DOC:SECTION","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40SECTIONS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@SECTIONS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FDEFINE-DEFINER-3ADEFINE-DEFINER-FOR-SYMBOL-LOCATIVE-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/LOCATIVES/DEFINE-DEFINER:DEFINE-DEFINER-FOR-SYMBOL-LOCATIVE-TYPE","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FLOCATIVES-2FDEFINERS-3ADEFINE-SYMBOL-LOCATIVE-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC-FULL/LOCATIVES/DEFINERS:DEFINE-SYMBOL-LOCATIVE-TYPE","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FBUILDER-3AREFERENCE-TO-COMMONDOC-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/COMMONDOC/BUILDER:REFERENCE-TO-COMMONDOC","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-AND-FIND-SOURCE-20-28METHOD-20NIL-20-28T-20T-20T-29-29-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-AND-FIND-SOURCE","LOCATIVE":["METHOD",[],[true,true,true]]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-AND-FIND-SOURCE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-AND-FIND-SOURCE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FSOURCE-API-3AFIND-SOURCE-20-28METHOD-20NIL-20-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-29-29-29","OBJECT":"40ANTS-DOC/SOURCE-API:FIND-SOURCE","LOCATIVE":["METHOD",[],["REFERENCE"]]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40REFERENCE-BASED-EXTENSIONS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@REFERENCE-BASED-EXTENSIONS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3AWITH-NODE-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC-FULL/COMMONDOC/MAPPER:WITH-NODE-PACKAGE","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3ANODE-SUPPORTS-CHILDREN-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/COMMONDOC/MAPPER:NODE-SUPPORTS-CHILDREN","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3AMAP-NODES-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/COMMONDOC/MAPPER:MAP-NODES","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FBULLET-3AMAKE-BULLET-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/COMMONDOC/BULLET:MAKE-BULLET","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FBUILDER-3ATO-COMMONDOC-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/COMMONDOC/BUILDER:TO-COMMONDOC","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FSOURCE-API-3AFIND-SOURCE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/SOURCE-API:FIND-SOURCE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-API-3ACANONICAL-REFERENCE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/REFERENCE-API:CANONICAL-REFERENCE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-20FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-ERROR","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-OBJECT-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-OBJECT","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3AEXPORTABLE-LOCATIVE-TYPE-P-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC:EXPORTABLE-LOCATIVE-TYPE-P","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ADEFINE-LOCATIVE-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:DEFINE-LOCATIVE-TYPE","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40NEW-OBJECT-TYPES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@NEW-OBJECT-TYPES","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-ARGS-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATIVE-ARGS","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-TYPE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATIVE-TYPE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-3AMAKE-REFERENCE-20FUNCTION-29","OBJECT":"40ANTS-DOC/REFERENCE:MAKE-REFERENCE","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-LOCATIVE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FREFERENCE-3AREFERENCE-29-29","OBJECT":"40ANTS-DOC/REFERENCE:REFERENCE-LOCATIVE","LOCATIVE":["READER","REFERENCE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-OBJECT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FREFERENCE-3AREFERENCE-29-29","OBJECT":"40ANTS-DOC/REFERENCE:REFERENCE-OBJECT","LOCATIVE":["READER","REFERENCE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-20CLASS-29","OBJECT":"40ANTS-DOC/REFERENCE:REFERENCE","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-3ARESOLVE-20FUNCTION-29","OBJECT":"40ANTS-DOC/REFERENCE:RESOLVE","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-LOCATIVE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-29-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-ERROR-LOCATIVE","LOCATIVE":["READER","LOCATE-ERROR"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-OBJECT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-29-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-ERROR-OBJECT","LOCATIVE":["READER","LOCATE-ERROR"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-MESSAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-29-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-ERROR-MESSAGE","LOCATIVE":["READER","LOCATE-ERROR"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-20CONDITION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE-ERROR","LOCATIVE":"CONDITION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-20FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATE","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40LOCATIVES-AND-REFERENCES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@LOCATIVES-AND-REFERENCES","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FPLUGINS-2FMATHJAX-3AMATHJAX-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/PLUGINS/MATHJAX:MATHJAX","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FPLUGINS-2FHIGHLIGHTJS-3AHIGHLIGHTJS-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/PLUGINS/HIGHLIGHTJS:HIGHLIGHTJS","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AINJECT-AFTER-CONTENT-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:INJECT-AFTER-CONTENT","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AINJECT-BEFORE-CONTENT-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:INJECT-BEFORE-CONTENT","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AINJECT-INTO-PAGE-HEADER-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:INJECT-INTO-PAGE-HEADER","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ACOPY-STATIC-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:COPY-STATIC","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ATHEME-PLUGINS-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:THEME-PLUGINS","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SEARCH-FORM-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-SEARCH-FORM","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-TOC-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-TOC","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-CONTENT-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-SIDEBAR-CONTENT","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-FOOTER-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-SIDEBAR-FOOTER","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-HEADER-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-SIDEBAR-HEADER","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-SIDEBAR","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-CONTENT-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-CONTENT","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-PAGE-FOOTER-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-PAGE-FOOTER","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-PAGE-HEADER-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-PAGE-HEADER","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-HTML-HEAD-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-HTML-HEAD","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-PAGE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-PAGE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-CSS-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:RENDER-CSS","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-THEME-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:HIGHLIGHT-THEME","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-LANGUAGES-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/API:HIGHLIGHT-LANGUAGES","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FDARK-3ADARK-THEME-20CLASS-29","OBJECT":"40ANTS-DOC-FULL/THEMES/DARK:DARK-THEME","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FLIGHT-3ALIGHT-THEME-20CLASS-29","OBJECT":"40ANTS-DOC-FULL/THEMES/LIGHT:LIGHT-THEME","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FDEFAULT-3ADEFAULT-THEME-20CLASS-29","OBJECT":"40ANTS-DOC-FULL/THEMES/DEFAULT:DEFAULT-THEME","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FTHEMES-2FDOCS-3A-3A-40DEFINING-A-THEME-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/THEMES/DOCS::@DEFINING-A-THEME","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40EXTENSION-API-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@EXTENSION-API","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-EQUAL-20FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/BASE:LOCATIVE-EQUAL","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AGLOSSARY-TERM-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:GLOSSARY-TERM","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FGLOSSARY-3ADEFINE-GLOSSARY-TERM-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/GLOSSARY:DEFINE-GLOSSARY-TERM","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-28RESTART-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"RESTART","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FRESTART-3ADEFINE-RESTART-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/RESTART:DEFINE-RESTART","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ASTDOUT-OF-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:STDOUT-OF","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AINCLUDE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:INCLUDE","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:LOCATIVE","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AARGUMENT-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:ARGUMENT","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ADISLOCATED-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:DISLOCATED","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"PACKAGE","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28TYPE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"TYPE","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28CONDITION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"CONDITION","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28CLASS-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"CLASS","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ASTRUCTURE-ACCESSOR-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:STRUCTURE-ACCESSOR","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AWRITER-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:WRITER","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AREADER-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:READER","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:ACCESSOR","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28METHOD-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"METHOD","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28GENERIC-FUNCTION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"GENERIC-FUNCTION","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28FUNCTION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"FUNCTION","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ASYMBOL-MACRO-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:SYMBOL-MACRO","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28COMPILER-MACRO-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"COMPILER-MACRO","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3AMACRO-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:MACRO","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ACONSTANT-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:CONSTANT","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28VARIABLE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"VARIABLE","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-3ASECTION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"40ANTS-DOC/LOCATIVES:SECTION","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FLOCATIVES-2FASDF-SYSTEM-3AASDF-SYSTEM-DOCUMENTATION-TITLE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/LOCATIVES/ASDF-SYSTEM:ASDF-SYSTEM-DOCUMENTATION-TITLE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-28ASDF-2FSYSTEM-3ASYSTEM-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29","OBJECT":"ASDF/SYSTEM:SYSTEM","LOCATIVE":["LOCATIVE"]},{"URL":"https://40ants.com/doc/#x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-2240ANTS-DOC-2FLOCATIVES-22-29-20PACKAGE-29","OBJECT":"40ANTS-DOC/LOCATIVES","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40LOCATIVE-TYPES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@LOCATIVE-TYPES","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-2FVARS-3A-2ADOCUMENT-MAX-NUMBERING-LEVEL-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC-FULL/BUILDER/VARS:*DOCUMENT-MAX-NUMBERING-LEVEL*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FLINK-3A-2ADOCUMENT-LINK-CODE-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC-FULL/LINK:*DOCUMENT-LINK-CODE*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-2FPRINTER-3A-2ADOCUMENT-UPPERCASE-IS-CODE-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC-FULL/BUILDER/PRINTER:*DOCUMENT-UPPERCASE-IS-CODE*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40DOCUMENTATION-PRINTER-VARIABLES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@DOCUMENTATION-PRINTER-VARIABLES","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FMARKDOWN-3A-3A-40MATHJAX-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/MARKDOWN::@MATHJAX","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FMARKDOWN-3A-3A-40MARKDOWN-SYNTAX-HIGHLIGHTING-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/MARKDOWN::@MARKDOWN-SYNTAX-HIGHLIGHTING","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FMARKDOWN-3A-3A-40MARKDOWN-INDENTATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/MARKDOWN::@MARKDOWN-INDENTATION","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FMARKDOWN-3A-3A-40MARKDOWN-SUPPORT-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/MARKDOWN::@MARKDOWN-SUPPORT","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FWORLD-3A-3A-40WORLD-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/WORLD::@WORLD","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-API-3ASOURCE-URI-20FUNCTION-29","OBJECT":"40ANTS-DOC/REFERENCE-API:SOURCE-URI","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FREFERENCE-API-3A-2ASOURCE-URI-FN-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC/REFERENCE-API:*SOURCE-URI-FN*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FGITHUB-3AMAKE-GITHUB-SOURCE-URI-FN-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/GITHUB:MAKE-GITHUB-SOURCE-URI-FN","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FGITHUB-3A-3A-40GITHUB-WORKFLOW-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/GITHUB::@GITHUB-WORKFLOW","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FCHANGELOG-3ADEFCHANGELOG-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/CHANGELOG:DEFCHANGELOG","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FCHANGELOG-3A-3A-40INDEX-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC/CHANGELOG::@INDEX","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3A-3A-40RENDERING-MULTIPLE-FORMATS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/BUILDER::@RENDERING-MULTIPLE-FORMATS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3A-2ADOCUMENT-HTML-BOTTOM-BLOCKS-OF-LINKS-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC-FULL/BUILDER:*DOCUMENT-HTML-BOTTOM-BLOCKS-OF-LINKS*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3A-2ADOCUMENT-HTML-TOP-BLOCKS-OF-LINKS-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC-FULL/BUILDER:*DOCUMENT-HTML-TOP-BLOCKS-OF-LINKS*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3AGET-CURRENT-ASDF-SYSTEM-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/BUILDER:GET-CURRENT-ASDF-SYSTEM","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/BUILDER:UPDATE-ASDF-SYSTEM-DOCS","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-FILES-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/BUILDER:RENDER-TO-FILES","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-STRING-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/BUILDER:RENDER-TO-STRING","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FBUILDER-3A-3A-40GENERATING-DOCUMENTATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/BUILDER::@GENERATING-DOCUMENTATION","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FAUTODOC-3ADEFAUTODOC-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/AUTODOC:DEFAUTODOC","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40AUTODOC-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@AUTODOC","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40CROSS-REFERENCING-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@CROSS-REFERENCING","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FIGNORED-WORDS-3AIGNORE-WORDS-IN-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC/IGNORED-WORDS:IGNORE-WORDS-IN-PACKAGE","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FIGNORED-WORDS-3ASUPPORTS-IGNORED-WORDS-P-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/IGNORED-WORDS:SUPPORTS-IGNORED-WORDS-P","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-2FIGNORED-WORDS-3AIGNORED-WORDS-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-DOC/IGNORED-WORDS:IGNORED-WORDS","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3A-2ASYMBOLS-WITH-IGNORED-MISSING-LOCATIONS-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC:*SYMBOLS-WITH-IGNORED-MISSING-LOCATIONS*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3A-2ADISCARD-DOCUMENTATION-P-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-DOC:*DISCARD-DOCUMENTATION-P*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-COPY-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC:DEFSECTION-COPY","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-DOC:DEFSECTION","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40DEFINING-SECTIONS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@DEFINING-SECTIONS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40BASICS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@BASICS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FSWANK-3ALOCATE-DEFINITION-FOR-EMACS-20FUNCTION-29","OBJECT":"40ANTS-DOC-FULL/SWANK:LOCATE-DEFINITION-FOR-EMACS","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40EMACS-INTEGRATION-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@EMACS-INTEGRATION","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40TUTORIAL-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@TUTORIAL","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40BACKGROUND-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@BACKGROUND","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40LINKS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@LINKS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-28-23A-28-2815-29-20BASE-CHAR-20-2E-20-2240ants-doc-full-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29","OBJECT":"40ants-doc-full","LOCATIVE":"SYSTEM"},{"URL":"https://40ants.com/doc/#x-28-23A-28-2810-29-20BASE-CHAR-20-2E-20-2240ants-doc-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29","OBJECT":"40ants-doc","LOCATIVE":"SYSTEM"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40DIFFERENCE-FROM-MGL-PAX-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@DIFFERENCE-FROM-MGL-PAX","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-3A-40ABOUT-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC::@ABOUT","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/doc/#x-2840ANTS-DOC-FULL-2FDOC-3A-40INDEX-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-DOC-FULL/DOC:@INDEX","LOCATIVE":"SECTION"}] \ No newline at end of file diff --git a/search/index.html b/search/index.html new file mode 100644 index 00000000..4776b80b --- /dev/null +++ b/search/index.html @@ -0,0 +1,123 @@ + + + + Search Page + + + + + + + + + + + + + + + + + + + +
Fork me on GitHub + + +
+ + + + + +
+ + + +
+
+ + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 00000000..544ccdca --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames":["../index","../changelog"],"filenames":["../","../changelog/"],"objects":{"40ANTS-DOC-FULL/SWANK":{"LOCATE-DEFINITION-FOR-EMACS":[0,6,2,"x-2840ANTS-DOC-FULL-2FSWANK-3ALOCATE-DEFINITION-FOR-EMACS-20FUNCTION-29"]},"40ANTS-DOC":{"DEFSECTION":[0,12,2,"x-2840ANTS-DOC-3ADEFSECTION-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"],"DEFSECTION-COPY":[0,12,2,"x-2840ANTS-DOC-3ADEFSECTION-COPY-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"],"*DISCARD-DOCUMENTATION-P*":[0,22,2,"x-2840ANTS-DOC-3A-2ADISCARD-DOCUMENTATION-P-2A-20-28VARIABLE-29-29"],"*SYMBOLS-WITH-IGNORED-MISSING-LOCATIONS*":[0,22,2,"x-2840ANTS-DOC-3A-2ASYMBOLS-WITH-IGNORED-MISSING-LOCATIONS-2A-20-28VARIABLE-29-29"],"EXPORTABLE-LOCATIVE-TYPE-P":[0,7,2,"x-2840ANTS-DOC-3AEXPORTABLE-LOCATIVE-TYPE-P-20GENERIC-FUNCTION-29"],"SECTION":[0,3,2,"x-2840ANTS-DOC-3ASECTION-20CLASS-29"],"SECTION-NAME":[0,18,2,"x-2840ANTS-DOC-3ASECTION-NAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-PACKAGE":[0,18,2,"x-2840ANTS-DOC-3ASECTION-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-READTABLE":[0,18,2,"x-2840ANTS-DOC-3ASECTION-READTABLE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-TITLE":[0,18,2,"x-2840ANTS-DOC-3ASECTION-TITLE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-LINK-TITLE-TO":[0,18,2,"x-2840ANTS-DOC-3ASECTION-LINK-TITLE-TO-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-ENTRIES":[0,18,2,"x-2840ANTS-DOC-3ASECTION-ENTRIES-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-EXTERNAL-DOCS":[0,18,2,"x-2840ANTS-DOC-3ASECTION-EXTERNAL-DOCS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"],"SECTION-IGNORE-WORDS":[0,18,2,"x-2840ANTS-DOC-3ASECTION-IGNORE-WORDS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-3ASECTION-29-29"]},"40ANTS-DOC/IGNORED-WORDS":{"IGNORED-WORDS":[0,7,2,"x-2840ANTS-DOC-2FIGNORED-WORDS-3AIGNORED-WORDS-20GENERIC-FUNCTION-29"],"SUPPORTS-IGNORED-WORDS-P":[0,7,2,"x-2840ANTS-DOC-2FIGNORED-WORDS-3ASUPPORTS-IGNORED-WORDS-P-20GENERIC-FUNCTION-29"],"IGNORE-WORDS-IN-PACKAGE":[0,12,2,"x-2840ANTS-DOC-2FIGNORED-WORDS-3AIGNORE-WORDS-IN-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC/AUTODOC":{"DEFAUTODOC":[0,12,2,"x-2840ANTS-DOC-2FAUTODOC-3ADEFAUTODOC-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC-FULL/BUILDER":{"RENDER-TO-STRING":[0,6,2,"x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-STRING-20FUNCTION-29"],"RENDER-TO-FILES":[0,6,2,"x-2840ANTS-DOC-FULL-2FBUILDER-3ARENDER-TO-FILES-20FUNCTION-29"],"UPDATE-ASDF-SYSTEM-DOCS":[0,6,2,"x-2840ANTS-DOC-FULL-2FBUILDER-3AUPDATE-ASDF-SYSTEM-DOCS-20FUNCTION-29"],"GET-CURRENT-ASDF-SYSTEM":[0,6,2,"x-2840ANTS-DOC-FULL-2FBUILDER-3AGET-CURRENT-ASDF-SYSTEM-20FUNCTION-29"],"*DOCUMENT-HTML-TOP-BLOCKS-OF-LINKS*":[0,22,2,"x-2840ANTS-DOC-FULL-2FBUILDER-3A-2ADOCUMENT-HTML-TOP-BLOCKS-OF-LINKS-2A-20-28VARIABLE-29-29"],"*DOCUMENT-HTML-BOTTOM-BLOCKS-OF-LINKS*":[0,22,2,"x-2840ANTS-DOC-FULL-2FBUILDER-3A-2ADOCUMENT-HTML-BOTTOM-BLOCKS-OF-LINKS-2A-20-28VARIABLE-29-29"]},"40ANTS-DOC/CHANGELOG":{"DEFCHANGELOG":[0,12,2,"x-2840ANTS-DOC-2FCHANGELOG-3ADEFCHANGELOG-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC-FULL/GITHUB":{"MAKE-GITHUB-SOURCE-URI-FN":[0,6,2,"x-2840ANTS-DOC-FULL-2FGITHUB-3AMAKE-GITHUB-SOURCE-URI-FN-20FUNCTION-29"]},"40ANTS-DOC/REFERENCE-API":{"*SOURCE-URI-FN*":[0,22,2,"x-2840ANTS-DOC-2FREFERENCE-API-3A-2ASOURCE-URI-FN-2A-20-28VARIABLE-29-29"],"SOURCE-URI":[0,6,2,"x-2840ANTS-DOC-2FREFERENCE-API-3ASOURCE-URI-20FUNCTION-29"],"CANONICAL-REFERENCE":[0,7,2,"x-2840ANTS-DOC-2FREFERENCE-API-3ACANONICAL-REFERENCE-20GENERIC-FUNCTION-29"]},"40ANTS-DOC-FULL/BUILDER/PRINTER":{"*DOCUMENT-UPPERCASE-IS-CODE*":[0,22,2,"x-2840ANTS-DOC-FULL-2FBUILDER-2FPRINTER-3A-2ADOCUMENT-UPPERCASE-IS-CODE-2A-20-28VARIABLE-29-29"]},"40ANTS-DOC-FULL/LINK":{"*DOCUMENT-LINK-CODE*":[0,22,2,"x-2840ANTS-DOC-FULL-2FLINK-3A-2ADOCUMENT-LINK-CODE-2A-20-28VARIABLE-29-29"]},"40ANTS-DOC-FULL/BUILDER/VARS":{"*DOCUMENT-MAX-NUMBERING-LEVEL*":[0,22,2,"x-2840ANTS-DOC-FULL-2FBUILDER-2FVARS-3A-2ADOCUMENT-MAX-NUMBERING-LEVEL-2A-20-28VARIABLE-29-29"]},"":{"40ANTS-DOC/LOCATIVES":[0,14,2,"x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-2240ANTS-DOC-2FLOCATIVES-22-29-20PACKAGE-29"]},"ASDF/SYSTEM":{"SYSTEM":[0,11,2,"x-28ASDF-2FSYSTEM-3ASYSTEM-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"]},"40ANTS-DOC/LOCATIVES/ASDF-SYSTEM":{"ASDF-SYSTEM-DOCUMENTATION-TITLE":[0,7,2,"x-2840ANTS-DOC-2FLOCATIVES-2FASDF-SYSTEM-3AASDF-SYSTEM-DOCUMENTATION-TITLE-20GENERIC-FUNCTION-29"]},"40ANTS-DOC/LOCATIVES":{"SECTION":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ASECTION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"CONSTANT":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ACONSTANT-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"MACRO":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AMACRO-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"SYMBOL-MACRO":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ASYMBOL-MACRO-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"ACCESSOR":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AACCESSOR-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"READER":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AREADER-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"WRITER":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AWRITER-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"STRUCTURE-ACCESSOR":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ASTRUCTURE-ACCESSOR-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"DISLOCATED":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ADISLOCATED-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"ARGUMENT":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AARGUMENT-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"LOCATIVE":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"INCLUDE":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AINCLUDE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"STDOUT-OF":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3ASTDOUT-OF-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"GLOSSARY-TERM":[0,11,2,"x-2840ANTS-DOC-2FLOCATIVES-3AGLOSSARY-TERM-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"]},"COMMON-LISP":{"VARIABLE":[0,11,2,"x-28VARIABLE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"COMPILER-MACRO":[0,11,2,"x-28COMPILER-MACRO-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"FUNCTION":[0,11,2,"x-28FUNCTION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"GENERIC-FUNCTION":[0,11,2,"x-28GENERIC-FUNCTION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"METHOD":[0,11,2,"x-28METHOD-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"CLASS":[0,11,2,"x-28CLASS-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"CONDITION":[0,11,2,"x-28CONDITION-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"TYPE":[0,11,2,"x-28TYPE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"PACKAGE":[0,11,2,"x-28PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"],"RESTART":[0,11,2,"x-28RESTART-20-2840ANTS-DOC-2FLOCATIVES-3ALOCATIVE-29-29"]},"40ANTS-DOC/RESTART":{"DEFINE-RESTART":[0,12,2,"x-2840ANTS-DOC-2FRESTART-3ADEFINE-RESTART-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC/GLOSSARY":{"DEFINE-GLOSSARY-TERM":[0,12,2,"x-2840ANTS-DOC-2FGLOSSARY-3ADEFINE-GLOSSARY-TERM-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC/LOCATIVES/BASE":{"LOCATIVE-EQUAL":[0,6,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-EQUAL-20FUNCTION-29"],"LOCATE":[0,6,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-20FUNCTION-29"],"LOCATE-ERROR":[0,6,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-20FUNCTION-29"],"LOCATE-ERROR-MESSAGE":[0,18,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-MESSAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-29-29"],"LOCATE-ERROR-OBJECT":[0,18,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-OBJECT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-29-29"],"LOCATE-ERROR-LOCATIVE":[0,18,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-LOCATIVE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-ERROR-29-29"],"LOCATIVE-TYPE":[0,7,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-TYPE-20GENERIC-FUNCTION-29"],"LOCATIVE-ARGS":[0,7,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATIVE-ARGS-20GENERIC-FUNCTION-29"],"DEFINE-LOCATIVE-TYPE":[0,12,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ADEFINE-LOCATIVE-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"],"LOCATE-OBJECT":[0,7,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-OBJECT-20GENERIC-FUNCTION-29"],"LOCATE-AND-FIND-SOURCE":[0,13,2,"x-2840ANTS-DOC-2FLOCATIVES-2FBASE-3ALOCATE-AND-FIND-SOURCE-20-28METHOD-20NIL-20-28T-20T-20T-29-29-29"]},"40ANTS-DOC-FULL/THEMES/DEFAULT":{"DEFAULT-THEME":[0,3,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FDEFAULT-3ADEFAULT-THEME-20CLASS-29"]},"40ANTS-DOC-FULL/THEMES/LIGHT":{"LIGHT-THEME":[0,3,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FLIGHT-3ALIGHT-THEME-20CLASS-29"]},"40ANTS-DOC-FULL/THEMES/DARK":{"DARK-THEME":[0,3,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FDARK-3ADARK-THEME-20CLASS-29"]},"40ANTS-DOC-FULL/THEMES/API":{"HIGHLIGHT-LANGUAGES":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-LANGUAGES-20GENERIC-FUNCTION-29"],"HIGHLIGHT-THEME":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AHIGHLIGHT-THEME-20GENERIC-FUNCTION-29"],"RENDER-CSS":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-CSS-20GENERIC-FUNCTION-29"],"RENDER-PAGE":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-PAGE-20GENERIC-FUNCTION-29"],"RENDER-HTML-HEAD":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-HTML-HEAD-20GENERIC-FUNCTION-29"],"RENDER-PAGE-HEADER":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-PAGE-HEADER-20GENERIC-FUNCTION-29"],"RENDER-PAGE-FOOTER":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-PAGE-FOOTER-20GENERIC-FUNCTION-29"],"RENDER-CONTENT":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-CONTENT-20GENERIC-FUNCTION-29"],"RENDER-SIDEBAR":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-20GENERIC-FUNCTION-29"],"RENDER-SIDEBAR-HEADER":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-HEADER-20GENERIC-FUNCTION-29"],"RENDER-SIDEBAR-FOOTER":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-FOOTER-20GENERIC-FUNCTION-29"],"RENDER-SIDEBAR-CONTENT":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SIDEBAR-CONTENT-20GENERIC-FUNCTION-29"],"RENDER-TOC":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-TOC-20GENERIC-FUNCTION-29"],"RENDER-SEARCH-FORM":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ARENDER-SEARCH-FORM-20GENERIC-FUNCTION-29"],"THEME-PLUGINS":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ATHEME-PLUGINS-20GENERIC-FUNCTION-29"],"COPY-STATIC":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3ACOPY-STATIC-20GENERIC-FUNCTION-29"],"INJECT-INTO-PAGE-HEADER":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AINJECT-INTO-PAGE-HEADER-20GENERIC-FUNCTION-29"],"INJECT-BEFORE-CONTENT":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AINJECT-BEFORE-CONTENT-20GENERIC-FUNCTION-29"],"INJECT-AFTER-CONTENT":[0,7,2,"x-2840ANTS-DOC-FULL-2FTHEMES-2FAPI-3AINJECT-AFTER-CONTENT-20GENERIC-FUNCTION-29"]},"40ANTS-DOC-FULL/PLUGINS/HIGHLIGHTJS":{"HIGHLIGHTJS":[0,6,2,"x-2840ANTS-DOC-FULL-2FPLUGINS-2FHIGHLIGHTJS-3AHIGHLIGHTJS-20FUNCTION-29"]},"40ANTS-DOC-FULL/PLUGINS/MATHJAX":{"MATHJAX":[0,6,2,"x-2840ANTS-DOC-FULL-2FPLUGINS-2FMATHJAX-3AMATHJAX-20FUNCTION-29"]},"40ANTS-DOC/REFERENCE":{"RESOLVE":[0,6,2,"x-2840ANTS-DOC-2FREFERENCE-3ARESOLVE-20FUNCTION-29"],"REFERENCE":[0,3,2,"x-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-20CLASS-29"],"REFERENCE-OBJECT":[0,18,2,"x-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-OBJECT-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FREFERENCE-3AREFERENCE-29-29"],"REFERENCE-LOCATIVE":[0,18,2,"x-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-LOCATIVE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-DOC-2FREFERENCE-3AREFERENCE-29-29"],"MAKE-REFERENCE":[0,6,2,"x-2840ANTS-DOC-2FREFERENCE-3AMAKE-REFERENCE-20FUNCTION-29"]},"40ANTS-DOC/SOURCE-API":{"FIND-SOURCE":[0,13,2,"x-2840ANTS-DOC-2FSOURCE-API-3AFIND-SOURCE-20-28METHOD-20NIL-20-2840ANTS-DOC-2FREFERENCE-3AREFERENCE-29-29-29"]},"40ANTS-DOC-FULL/COMMONDOC/BUILDER":{"TO-COMMONDOC":[0,7,2,"x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FBUILDER-3ATO-COMMONDOC-20GENERIC-FUNCTION-29"],"REFERENCE-TO-COMMONDOC":[0,7,2,"x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FBUILDER-3AREFERENCE-TO-COMMONDOC-20GENERIC-FUNCTION-29"]},"40ANTS-DOC-FULL/COMMONDOC/BULLET":{"MAKE-BULLET":[0,6,2,"x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FBULLET-3AMAKE-BULLET-20FUNCTION-29"]},"40ANTS-DOC-FULL/COMMONDOC/MAPPER":{"MAP-NODES":[0,7,2,"x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3AMAP-NODES-20GENERIC-FUNCTION-29"],"NODE-SUPPORTS-CHILDREN":[0,7,2,"x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3ANODE-SUPPORTS-CHILDREN-20GENERIC-FUNCTION-29"],"WITH-NODE-PACKAGE":[0,12,2,"x-2840ANTS-DOC-FULL-2FCOMMONDOC-2FMAPPER-3AWITH-NODE-PACKAGE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC-FULL/LOCATIVES/DEFINERS":{"DEFINE-SYMBOL-LOCATIVE-TYPE":[0,12,2,"x-2840ANTS-DOC-FULL-2FLOCATIVES-2FDEFINERS-3ADEFINE-SYMBOL-LOCATIVE-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC/LOCATIVES/DEFINE-DEFINER":{"DEFINE-DEFINER-FOR-SYMBOL-LOCATIVE-TYPE":[0,12,2,"x-2840ANTS-DOC-2FLOCATIVES-2FDEFINE-DEFINER-3ADEFINE-DEFINER-FOR-SYMBOL-LOCATIVE-TYPE-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-DOC-FULL/TRANSCRIBE":{"TRANSCRIBE":[0,6,2,"x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIBE-20FUNCTION-29"],"*SYNTAXES*":[0,22,2,"x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3A-2ASYNTAXES-2A-20-28VARIABLE-29-29"],"TRANSCRIPTION-ERROR":[0,0,2,"x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-ERROR-20CONDITION-29"],"TRANSCRIPTION-CONSISTENCY-ERROR":[0,0,2,"x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-CONSISTENCY-ERROR-20CONDITION-29"],"TRANSCRIPTION-OUTPUT-CONSISTENCY-ERROR":[0,0,2,"x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-OUTPUT-CONSISTENCY-ERROR-20CONDITION-29"],"TRANSCRIPTION-VALUES-CONSISTENCY-ERROR":[0,0,2,"x-2840ANTS-DOC-FULL-2FTRANSCRIBE-3ATRANSCRIPTION-VALUES-CONSISTENCY-ERROR-20CONDITION-29"]}},"objnames":[["lisp","symbol","Symbol"],["lisp","argument","Argument"],["lisp","system","ASDF System"],["lisp","class","Class"],["lisp","compiler-macro","Compiler Macro"],["lisp","constant","Constant"],["lisp","function","Function"],["lisp","generic-function","Generic Function"],["lisp","glossary-term","Glossary Term"],["lisp","include","Included Block"],["lisp","stdout-of","Stdout of Code"],["lisp","locative","Locative"],["lisp","macro","Macro"],["lisp","method","Method"],["lisp","package","Package"],["lisp","restart","Restart"],["lisp","section","Section"],["lisp","accessor","Accessor"],["lisp","reader","Slot Reader"],["lisp","writer","Slot Write"],["lisp","structure-accessor","Structure Accessor"],["lisp","type","Type"],["lisp","variable","Variable"]],"objtypes":["lisp:symbol","lisp:argument","lisp:system","lisp:class","lisp:compiler-macro","lisp:constant","lisp:function","lisp:generic-function","lisp:glossary-term","lisp:include","lisp:stdout-of","lisp:locative","lisp:macro","lisp:method","lisp:package","lisp:restart","lisp:section","lisp:accessor","lisp:reader","lisp:writer","lisp:structure-accessor","lisp:type","lisp:variable"],"terms":{"Thi":[1,0],"system":[1,0],"is":[1,0],"a":[1,0],"fork":[1,0],"of":[1,0],"MGL-PAX":[1,0],".":[1,0],"There":[0],"ar":[1,0],"few":[1,0],"reasons,":[0],"why":[0],"I've":[0],"creat":[0],"the":[1,0],"fork.":[0],"The":[0],"main":[0],"goal":[0],"to":[1,0],"extract":[1,0],"core":[1,0],"featur":[1,0],"into":[1,0],"40ants-doc":[1,0],"system\nwith":[0],"as":[1,0],"littl":[0],"depend":[1,0],"possible.":[0],"important,":[0],"becaus":[1,0],"with":[1,0],"'s\nstyle,":[0],"you":[1,0],"defin":[1,0],"document":[1,0],"section":[1,0],"in":[1,0],"your":[0],"library'":[0],"code,":[0],"which":[1,0],"makes\nit":[0],"on":[1,0],"system.":[1,0],"However,":[0],"heavi":[1,0],"weight":[0],"dependencies\nlik":[0],"IRONCLAD":[0],",":[1,0],"3BMD":[0],"or":[0],"SWANK":[0],"should":[1,0],"not":[1,0],"be":[1,0],"required.":[0],"second":[0],"wa":[1,0],"refactor":[1,0],"3.5k":[0],"line":[0],"pax.lisp":[0],"file":[1,0],"into\na":[0],"smaller":[0],"modul":[1,0],"make":[1,0],"navig":[0],"easier.":[0],"will":[1,0],"help":[0],"ani":[1,0],"person\nwho":[0],"decid":[0],"learn":[0],"how":[1,0],"builder":[1,0],"works.":[0],"Also,\ngranular":[0],"design":[1,0],"it":[1,0],"possibl":[1,0],"load":[0],"subsystem":[1,0],"like":[1,0],"SLIME":[1,0],"SLY":[1,0],"\nintegration.":[0],"third":[0],"process":[0],"more":[1,0],"sequenti":[0],"and":[1,0],"hackable.\nTo":[0],"introduc":[0],"hook":[0],"for":[1,0],"ad":[1,0],"new":[1,0],"markup":[1,0],"languages,":[0],"HTML":[1,0],"themes.":[0],"Here":[0],"alreadi":[0],"implement":[0],"thi":[1,0],"fork:":[0],"Core":[0],"now":[1,0],"ha":[1,0],"onli":[1,0],"two":[1,0],"NAMED-READTABLES":[0],"\n":[1,0],"PYTHONIC-STRING-READER":[0],"If":[0],"want":[0],"compil":[1,0],"documentation,":[0],"load\n":[0],"40ants-doc-ful":[0],"download":[1,0],"such":[1,0],"markdown\n":[0],"parser":[0],"more.":[0],"Now":[1,0],"don't":[0],"have":[1,0],"import":[0],"loc":[1,0],"symbol":[1,0],"package.":[1,0],"Import\n":[0],"defsect":[1,0],"macro":[1,0],"enough":[0],"for\n":[1,0],"library!":[0],"Added":[1,0],"warn":[1,0],"mechanism,":[0],"issu":[1,0],"word":[1,0],"looks\n":[0],"symbol,":[0],"but":[1,0],"when":[1,0],"real":[0],"refer":[1,0],"absent:":[0],"WARNING:":[0],"Unabl":[1,0],"find":[1,0],"target":[1,0],"#\n":[0],"mention":[1,0],"at":[1,0],"40Ant":[0],"Doc":[0],"Manual":[0],"/":[1,0],"Extension":[0],"API":[1,0],"Refer":[0],"Base":[0],"Extensions\n":[0],"Document":[0],"us":[1,0],"CommonDoc":[0],"intermedi":[0],"format,":[0],"languages\n":[0],"other":[1,0],"than":[1,0],"Markdown":[1,0],"can":[1,0],"supported.":[0],"JS":[1,0],"search":[1,0],"index":[1,0],"work":[1,0],"host":[0],"page":[1,0],"static":[0],"website\n":[0],"GitHub":[1,0],"pages.":[1,0],"It":[1,0],"render":[1,0],"multipl":[1,0],"format":[1,0],"cross":[1,0],"between":[1,0],"them.\n":[0],"See":[0],"Multipl":[0],"Format":[0],"I'm":[0],"plan":[0],"extend":[0],"even":[0],"Read":[1,0],"todo":[0],"about\npropos":[0],"start":[0],"discuss":[0],"\non":[0],"suggest":[0],"feature.":[0],"full":[1,0],"list":[1,0],"chang":[1,0],"ChangeLog":[1,0],"section.":[1,0],"Why":[0],"differ":[1,0],"About":[0],"Version:":[0],"0.12.0":[1,0],"Description:":[0],"Allow":[1,0],"put":[1,0],"insid":[1,0],"lisp":[0],"cross-refer":[0],"entities.":[0],"Licence:":[0],"MIT":[0],"Author:":[0],"Alexand":[0],"Artemenko":[0],"Mailto:":[0],"svetlyak.40wt@gmail.com":[0],"Homepage:":[0],"https://40ants.com/doc":[0],"Bug":[0],"tracker:":[0],"https://github.com/40ants/doc/issu":[0],"Sourc":[0],"control:":[0],"GIT":[0],"Depend":[0],"on:":[0],"asdf":[1,0],"named-readt":[0],"pythonic-string-read":[0],"uiop":[0],"40ANTS-DOC":[0],"ASDF":[1,0],"System":[0],"Detail":[0],"0.1.0":[1,0],"generator.":[0],"You":[1,0],"need":[0],"system,":[0],"build":[1,0],"librari":[1,0],"alexandria":[0],"babel":[0],"cl-fad":[0],"cl-ppcre":[0],"closer-mop":[0],"common-doc":[0],"common-html":[0],"commondoc-markdown":[0],"dexador":[0],"docs-config":[0],"fare-util":[0],"jonathan":[0],"lass":[0],"local-tim":[0],"log4cl":[0],"slynk":[0],"spinneret":[0],"stem":[0],"str":[0],"swank":[0],"tmpdir":[0],"xml-emitt":[0],"40ANTS-DOC-FULL":[0],"offici":[0],"repositori":[0],"and\nth":[0],"latest":[1,0],"version.":[0],".\nBecaus":[0],"massiv":[0],"refactoring,":[0],"incompat":[1,0],"origin":[0],"repository.":[0],"Link":[1,0],"stori":[0],"behind":[0],"precursor":[0],"written\nbi":[0],"Gábor":[0],"Melis.":[0],"As":[0],"user,":[0],"I":[0],"frequent":[0],"run":[1,0],"that'":[0],"incomplete\nand":[0],"out":[1,0],"date,":[0],"so":[0],"tend":[0],"stai":[0],"editor":[0],"explor":[0],"the\ncod":[0],"by":[1,0],"jump":[0],"around":[0],"'s":[1,0],"M-.":[0],"library\nauthor,":[0],"spend":[0],"great":[0],"deal":[0],"time":[0],"polish":[0],"precious\nlittl":[0],"write":[0],"documentation.":[0],"In":[0],"fact,":[0],"rare":[0],"anyth":[0],"comprehens":[0],"docstrings\nfor":[0],"export":[1,0],"stuff.":[0],"Write":[0],"docstr":[1,0],"feel":[0],"easier":[0],"a\nsepar":[0],"user":[0],"manual":[0],"thei":[0],"alwai":[0],"close":[0],"hand":[0],"during\ndevelopment.":[0],"drawback":[0],"style":[0],"that":[1,0],"library\nhav":[0],"piec":[0],"big":[0],"pictur":[0],"togeth":[1,0],"themselves.":[0],"That'":[0],"easi":[0],"solve,":[0],"thought,":[0],"let'":[0],"just":[0],"all":[1,0],"narrative\nthat":[0],"hold":[0],"code":[1,0],"bit":[0],"a\nLiter":[0],"Program":[0],"weeni":[0],"turn":[1,0],"out.":[0],"original\nprototyp":[0],"did":[0],"almost":[0],"everyth":[0],"this:":[1,0],"(defmacro":[0],"(name":[0],"docstring)\n":[0],"`(defun":[0],",name":[0],"()":[0],",docstring))":[0],"Armed":[0],"soon":[0],"found":[0],"myself":[0],"organ":[0],"following\nth":[0],"flow":[0],"level":[0],"releg":[0],"comment":[0],"to\nimplement":[0],"detail":[0],"entirely.":[0],"some":[1,0],"portion":[0],"of\n":[0],"were":[1,0],"functions,\nmacro":[0],"variabl":[1,0],"relat":[1,0],"narrative,":[0],"was\neffect":[0],"repeat":[0],"DEFPACKAGE":[0],"form":[1,0],"complet":[0],"little\ncom":[0],"names.":[0],"A":[1,0],"clear":[0],"violat":[0],"OAOO":[0],"them":[0],"had":[0],"go,":[0],"got":[0],"of\nsymbol":[0],"export.":[0],"That":[0],"great,":[0],"is\nambigu":[0],"if,":[0],"example,":[1,0],"function,":[0],"class\nar":[0],"name":[1,0],"same":[1,0],"symbol.":[1,0],"concern":[0],"exporting,":[0],"of\ncourse,":[0],"didn't":[0],"readability.":[0],"Distractingly,":[0],"such\nsymbols,":[0],"pop":[0],"up":[0],"select":[0],"dialogs.":[0],"two\nbird":[0],"kill,":[0],"accompani":[0],"type":[1,0],"was\nlat":[0],"gener":[1,0],"concept":[0],"locatives:":[0],"(defsect":[0],"@introduct":[0],"()\n":[0],"\"A":[0],"singl":[1,0],"man":[0],"...\"\n":[0],"(foo":[0],"class)\n":[0],"(bar":[0],"function))":[0],"After":[0],"elisp":[0],"hacking,":[0],"smart":[0],"disambiguate\nbas":[0],"vicin":[0],"and\neveryth":[0],"good":[0],"while.":[0],"Then":[0],"realiz":[0],"could":[1,0],"if":[1,0],"there\nwer":[0],"locative.":[1,0],"Go":[0],"down":[0],"path,":[0],"began":[0],"feel\nth":[0],"urg":[0],"pretti":[0],"necessary\ninform":[0],"manifest":[0],"forms.":[0],"design\nconstraint":[0],"impos":[0],"typic":[0],"upcas":[0],"there":[1,0],"be\nno":[0],"explicitli":[0],"mark":[0],"links:":[0],"works,":[0],"then":[0],"the\ndocument":[0],"shall":[0],"also":[1,0],"abl":[1,0],"what'":[0],"being\nref":[0],"to.":[0],"settl":[0],"reason":[0],"non-intrusive\nformat,":[0],"thousand":[0],"later":[0],"born.":[0],"Background":[0],"provid":[1,0],"an":[1,0],"extrem":[0],"poor":[0],"man'":[0],"Explorabl":[0],"Programming\nenvironment.":[0],"Narr":[0],"primarili":[0],"live":[1,0],"call":[0],"that\nmix":[0],"markdown":[0],"functions,":[0],"variables,\netc,":[0],"probabl":[0],"their":[1,0],"own":[1,0],"docstrings.":[0],"primari":[0],"focu":[0],"easili":[0],"using\n":[0],"(":[0],"slime-edit-definit":[0],").":[0],"enabl":[0],"some\nfanci":[0],"Emac":[0],"Integrat":[0],"Gener":[1,0],"documentation\nfrom":[0],"referenc":[1,0],"item":[1,0],"\nformat":[0],"implemented.":[0],"With":[0],"simplist":[0],"tool":[0],"provided,":[0],"mai":[0],"accomplish":[0],"similar\neffect":[0],"Liter":[0],"Programming,":[0],"generated\nfrom":[0],"vice":[0],"versa":[0],"no":[0],"support":[1,0],"chunk":[0],"yet.\nCod":[0],"first,":[0],"must":[0],"look":[0],"pretty,":[0],"code.":[0],"When":[0],"lisp,":[0],"press":[0],"on\nth":[0],"take":[0],"there.":[0],"Section":[0],"refer\nto":[0],"sections,":[0],"packages,":[0],"etc":[0],"keep":[0],"exploring.":[0],"exampl":[1,0],"together:":[0],"(uiop:define-packag":[0],"#:foo-random\n":[0],"(:nicknam":[0],"#:40ants-doc-full/tutorial)\n":[0],"(:document":[0],"\"Thi":[0],"packag":[1,0],"variou":[0],"util":[0],"random.":[0],"@FOO-RANDOM-MANUAL.\")\n":[0],"(:use":[0],"#:common-lisp\n":[0],"#:40ants-doc)\n":[0],"(:import-from":[0],"#:40ants-doc/ignored-words\n":[0],"#:ignore-words-in-package)\n":[0],"(:export":[0],"#:foo-random-state\n":[0],"#:state\n":[0],"#:*foo-state*\n":[0],"#:gaussian-random\n":[0],"#:uniform-random))\n\n(in-packag":[0],"foo-random)\n\n(defsect":[0],"@foo-random-manu":[0],"(:titl":[0],"\"Foo":[0],"Random":[0],"manual\"\n":[0],":ignore-word":[0],"(\"FOO\"))\n":[0],"\"Here":[0],"describ":[0],"common":[0],"(and\n":[0],"exported)":[0],"function":[1,0],"follow.":[0],"Thei":[0],"*FOO-STATE*,\n":[0],":RANDOM-STATE":[0],"keyword":[0],"arg.":[0],"Also":[0],"explain":[0],"to\n":[0],"choos":[0],"which.\"\n":[0],"(foo-random-st":[0],"(state":[0],"(reader":[0],"foo-random-state))\n":[0],"\"Hei":[0],"we":[1,0],"print":[0],"states!\"\n":[0],"(print-object":[0],"(method":[0],"t)))\n":[0],"(*foo-state*":[0],"variable)\n":[0],"(gaussian-random":[0],"function)\n":[0],"(uniform-random":[0],";;":[0],"subsection\n":[0],"(@foo-random-exampl":[0],"section))\n\n(defclass":[0],"foo-random-st":[0],"((state":[0],":reader":[0],"state\n":[0],":document":[0],"\"Return":[0],"random":[0],"foo'":[0],"state.\")))\n\n(defmethod":[0],"print-object":[0],"((object":[0],"foo-random-state)":[0],"stream)\n":[0],"(print-unreadable-object":[0],"(object":[0],"stream":[0],":type":[0],"t)))\n\n(defvar":[0],"*foo-state*":[0],"(make-inst":[0],"'foo-random-state)\n":[0],"\"Much":[0],"*RANDOM-STATE*":[0],"FOO":[0],"algorithm.\")\n\n(defun":[0],"uniform-random":[0],"(limit":[0],"&kei":[0],"(random-st":[0],"*foo-state*))\n":[0],"number":[0],"from":[1,0],"0":[0],"LIMIT":[0],"(exclusive)\n":[0],"uniform":[0],"distribution.\"\n":[0],"(declar":[0],"(ignor":[0],"limit":[0],"random-state))\n":[0],"nil)\n\n(defun":[0],"gaussian-random":[0],"(stddev":[0],"zero":[0],"mean":[0],"normal":[0],"distribut":[0],"with\n":[0],"STDDEV.\"\n":[0],"stddev":[0],"nil)\n\n(defsect":[0],"@foo-random-exampl":[0],"\"Examples\")\n":[0],"\"Let'":[0],"see":[0],"transcript":[1,0],"session":[0],"someon":[0],"working\n":[0],"FOO:\n\n":[0],"```cl-transcript\n":[0],"(valu":[0],"(princ":[0],":hello)":[0],"(list":[0],"1":[0],"2))\n":[0],"..":[0],"HELLO\n":[0],"=>":[0],":HELLO\n":[0],"(1":[0],"2)\n\n":[0],"==>":[0],"#\n":[0],"```\")\n\n":[0],"veri":[0],"strip":[1,0],"is\neasy:":[0],"(40ants-doc-full/builder:render-to-string\n":[0],"@foo-random-manual\n":[0],":format":[0],":markdown)":[0],"For":[1,0],"would":[0],"\n\n#":[0],"Foo":[0],"manual\n\nHer":[0],"(and\nexported)":[0],"[`*foo-state*`][2133],\nand":[0],"`:RANDOM-STATE`":[0],"to\nchoos":[0],"which.\n\n\n\n##":[0],"[class](1cdd)":[0],"`foo-random:foo-random-state`":[0],"()\n\n\n\n##":[0],"[reader](eec8)":[0],"`foo-random:state`":[0],"(foo-random-state)":[0],"()\n\nReturn":[0],"state.\n\nHei":[0],"states!\n\n\n\n##":[0],"[method](0a8c)":[0],"`common-lisp:print-object`":[0],"stream\n\n\n\n##":[0],"[variable](7026)":[0],"`foo-random:*foo-state*`":[0],"#\n\nMuch":[0],"`*RANDOM-STATE*`":[0],"`FOO`":[0],"algorithm.\n\n\n\n##":[0],"[function](1833)":[0],"`foo-random:gaussian-random`":[0],"\\*foo-state\\*)\n\nReturn":[0],"with\n`STDDEV`.\n\n\n\n##":[0],"[function](45c0)":[0],"`foo-random:uniform-random`":[0],"`LIMIT`":[0],"(exclusive)\nuniform":[0],"distribution.\n\n\n\n##":[0],"Examples\n\nLet'":[0],"working\nwith":[0],"`FOO`:\n\n```cl-transcript\n(valu":[0],"2))\n..":[0],"HELLO\n=>":[0],":HELLO\n=>":[0],"2)\n\n(make-inst":[0],"'foo-random-state)\n==>":[0],">\n```\n\n[2133]:":[0],"#x-28FOO-RANDOM-3A-2AFOO-STATE-2A-20-28VARIABLE-29-29\n[1cdd]:":[0],"https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L35\n[eec8]:":[0],"https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L36\n[0a8c]:":[0],"https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L39\n[7026]:":[0],"https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L42\n[45c0]:":[0],"https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L45\n[1833]:":[0],"https://github.com/40ants/doc/blob/4be20a5a946eb3526a75241c43c75701e6407b78/full/tutorial.lisp#L51":[0],"plain":[0],"text":[1,0],"readbl":[0],"viewed\nfrom":[0],"simpl":[0],"editor,":[0],"drop":[0],"fork\nbecaus":[0],"most":[1,0],"read":[0],"browser":[0],"these":[0],"days.":[0],"To":[0],"files,":[0],"40ants-doc-full/builder:render-to-fil":[1,0],"\nand":[0],"40ants-doc-full/builder:update-asdf-system-doc":[1,0],"functions.":[0],"Last":[0],"different,":[0],"related\nlibrari":[0],"output":[1,0],"go":[0],"files,\nbut":[0],"cross-pag":[0],"link":[1,0],"automat":[1,0],"symbols\nment":[0],"for\nsom":[0],"conveni":[1,0],"cover":[0],"cases.":[0],"Note":[0],"(*FOO-STATE*":[0],"VARIABLE)":[0],"includ":[0],"in\n":[0],"@FOO-RANDOM-MANUAL":[0],"two\ninst":[0],"'locatives'":[0],"to\ndefinit":[0],"ti":[0],"symbols.":[1,0],"Loc":[1,0],"Type":[0],"block":[0],"tag":[1,0],"cl-transcript":[0],"is\nautomat":[0],"check":[1,0],"up-to-dateness.":[0],"See\n":[0],"Transcript":[0],"Tutori":[0],")":[0],"allow":[1,0],"one\nto":[0],"visit":[0],"sourc":[1,0],"locat":[0],"thing":[0],"identifi":[0],"a\nsymbol":[0],"befor":[0],"after":[0],"buffer.":[0],"With\nthi":[0],"extension,":[0],"previou":[1,0],"next":[0],"expression\naround":[0],"interest,":[0],"straight":[0],"the\ndefinit":[0],"correspond":[1,0],"fails,":[0],"\nwill":[0],"try":[1,0],"definit":[1,0],"wai":[1,0],"involve\npop":[0],"xref":[1,0],"buffer":[0],"let":[0],"interact":[0],"select\non":[0],"definitions.":[0],"term":[0],"SWANK-BACKEND:FIND-SOURCE-LOCATION":[0],"and\n":[1,0],"SWANK-BACKEND:FIND-DEFINITIONS":[0],"whose":[0],"vari":[0],"across":[0],"Lisp\nimplementations.":[0],"Sadly,":[0],"integr":[0],"doe":[1,0],"because\nit":[0],"definition.":[0],"follow":[0],"examples,":[1,0],"cursor":[0],"one\nof":[0],"charact":[0],":":[0],"foo\nfoo":[0],"function\n(funct":[0],"foo)\n(foo":[0],"particular,":[0],"SYMBOL":[0],"fine":[0],"Just":[1,0],"vanilla":[0],"In\nthi":[0],"default\nmethod:":[0],";;;;":[0],"`(method":[0],"(t":[0],"t":[0],"t))`":[0],"works.\n;;;;":[0],"But":[0],"semicolon":[0],"inside:":[0],"`(method\n;;;;":[0],"t))`,":[0],"won't,":[0],"wari":[0],"breaks\n;;;;":[0],"comments.":[0],"prefix":[1,0],"argument":[1,0],"C-u":[0],"),":[0],"enter":[0],"plu":[0],"a\nloc":[0],"separ":[0],"whitespac":[0],"preselect":[0],"the\npossibilities.":[0],"extens":[0],"Emacs\niniti":[0],"(or":[0],"src/pax.el":[0],"):":[0],";;;":[0],"integration\n\n(defun":[0],"40ants-doc-edit-locative-definit":[0],"&option":[0],"where)\n":[0],"(40ants-doc-locate-definit":[0],"(40ants-doc-locative-before))\n":[0],"(40ants-doc-locative-after))\n":[0],"(40ants-doc-locative-after-in-brackets))\n":[0],"\"foo":[0],"function\"":[0],"\"function":[0],"foo\"":[0],"syntax":[0],"use\n":[0],"(let":[0],"((po":[0],"(cl-posit":[0],"?\\":[0],"name)))\n":[0],"(when":[0],"pos\n":[0],"(cl-subseq":[0],"pos)\n":[0],"(1+":[0],"pos)))\n":[0],"pos))\n":[0],"pos)))))))\n\n(defun":[0],"40ants-doc-locative-befor":[0],"(ignore-error":[0],"(save-excursion\n":[0],"(slime-beginning-of-symbol)\n":[0],"(slime-last-expression))))\n\n(defun":[0],"40ants-doc-locative-aft":[0],"(slime-end-of-symbol)\n":[0],"(slime-forward-sexp)\n":[0],"40ants-doc-locative-after-in-bracket":[0],"(skip-chars-forward":[0],"\"`\"":[0],"(+":[0],"(point)":[0],"1))\n":[0],"(and":[0],"(=":[0],"\"\\\\]\"":[0],"1)))\n":[0],"\"\\\\[\"":[0],"1))))\n":[0],"(buffer-substring-no-properties\n":[0],"(point)\n":[0],"(progn":[0],"(search-forward":[0],"\"]\"":[0],"nil":[0],"1000))\n":[0],"(1-":[0],"(point))))))))\n\n(defun":[0],"40ants-doc-locate-definit":[0],"locative)\n":[0],"locative\n":[0],"((location\n":[0],"(slime-eval\n":[0],"Silent":[0],"fail":[0],"mgl-pax":[0],"loaded.\n":[0],"`(cl:when":[0],"(cl:find-packag":[0],":mgl-pax)\n":[0],"(cl:funcall\n":[0],"(cl:find-symbol\n":[0],"(cl:symbol-nam":[0],":locate-definition-for-emacs)":[0],",locative)))))\n":[0],"(consp":[0],"location)\n":[0],"(not":[0],"(eq":[0],"(car":[0],"location)":[0],":error)))\n":[0],"(slime-edit-definition-cont\n":[0],"(make-slime-xref":[0],":dspec":[0],"`(,name)\n":[0],":locat":[0],"location))\n":[0],"\"dummi":[0],"name\"\n":[0],"where)))))\n\n(when":[0],"(boundp":[0],"'slime-edit-definition-hooks)\n":[0],"(add-hook":[0],"'slime-edit-definition-hook":[0],"'40ants-doc-edit-locative-definition))\n":[0],"Note,":[0],"anoth":[0],"part":[0],"to\ntranscript":[0],"blocks.":[0],"examin":[0],"detail.":[0],"Defin":[1,0],"mayb":[0],"symbols.\nA":[0],"scenes,":[0],"global":[0],"NAME":[0],"and\ni":[0],"bound":[0],"object.":[0],"By":[0],"convention,":[0],"names\nstart":[0],"@":[0],"example.":[0],"ENTRIES":[0],"consist":[0],"references.":[0],"Docstr":[0],"are\narbitrari":[0],"string":[0],"the\nforms:":[0],"(symbol":[0],"locative)":[0],"((symbol1":[0],"symbol2":[0],"...":[0],"symboln)":[0],"(FOO":[0],"FUNCTION)":[0],"(@BAR\nSECTION)":[0],"sai":[1,0],"@BAR":[0],"subsect":[0],"this\none.":[0],"(BAZ":[0],"(METHOD":[0],"(T":[0],"T":[0],"T)))":[0],"default":[1,0],"method":[1,0],"the\nthre":[0],"BAZ":[0],"is\nequival":[0],"(FUNCTION))":[0],"either":[0],"list\nwhos":[0],"CAR":[0],"case,":[0],"the\ntyp":[0],"while":[0],"rest":[0],"element":[0],"locative\narguments.":[0],"locative\ntyp":[0],"avail":[1,0],"box.":[1,0],"occur":[0],"typically\nwith":[0],"locatives,":[0],"(see":[0],"40ants-doc/reference:resolv":[0],"the\n":[1,0],"until":[0],"generated,":[0],"is\nallow":[0],"yet":[0],"defined.":[0],"set":[0],":EXPORT":[1,0],"true,":[1,0],"are\ncandid":[0],"exporting.":[0],"candid":[0],"access":[0],"(it'":[0],"OTHER-PACKAGE:SOMETHING":[0],")\n":[0],"a\n":[0],"approv":[0],"exportable-locative-type-p":[0],"idea":[0],"confound":[0],"force\ndocument":[0],"Howev":[0],"into\n":[0],"explicit":[1,0],"readable,":[0],"and\nchang":[0],"NIL":[1,0],"automatic\nwarn":[0],"documention.":[0],"argument,":[0],"note":[0],"cause\n":[0],"varianc":[0],"\nerror":[0],"SBCL":[0],"prevent":[1,0],"it,":[0],"UIOP:DEFINE-PACKAGE":[1,0],"instead\nof":[0],"CL:DEFPACKAGE":[0],":TITLE":[0],"non-marked-up":[0],"non-nil,":[0],"determines\nth":[0],"head":[0],"output.":[0],":LINK-TITLE-TO":[0],"a\nrefer":[0],"given":[1,0],"an\n":[0],"(OBJECT":[0],"LOCATIVE)":[0],"pair":[0],"when\ngener":[0],"specified,":[0],"own\nanchor.":[0],":DISCARD-DOCUMENTATION-P":[0],"(default":[0],"*discard-documentation-p*":[0],")\ni":[0],"record":[0],"save":[0],"memory.":[0],"EXTERNAL-DOCS":[1,0],"URL":[1,0],"s":[1,0],"lead":[0],"documentation\nof":[0],"libraries.":[1,0],"These":[0],"you'll":[0],"automatic\ncross-links.":[0],"EXTERNAL-LINKS":[1,0],"contain":[1,0],"alist":[0],"(\"name\"":[0],"\"":[0],"\")":[0],"pairs.\nThes":[0],"tranform":[0],"append":[0],"each\nmarkdown":[0],"chapter.":[0],"are\nhav":[0],"chapter":[0],"same\n":[0],"short":[0],"links.":[1,0],":IGNORE-WORDS":[0],"pass":[0],"cause\nwarnings.":[0],"Usualli":[0],"uppercas":[1,0],"symbols\nin":[0],"current":[1,0],"package,":[0],"LISP":[0],"etc.":[0],"DOCS-BUILDER":[0],"might":[1,0],"want\nto":[0],"@readm":[0],"README":[1,0],".md":[1,0],"content":[0],"as\nyour":[0],"case":[1,0],"popular":[0],"having\na":[0],"copi":[1,0],"doc,":[0],"do":[1,0],"code:":[0],"(defparamet":[0],"(40ants-doc:copy-sect":[0],"@index))":[0],"valu":[0],"DISCARD-DOCUMENTATION-P":[0],"argument.\nOn":[0],"*DISCARD-DOCUMENTATION-P*":[0],"true":[1,0],"before\nbuild":[0],"binari":[0],"application.":[0],"Sometim":[0],"without":[1,0],"attached.":[0],"Mito":[1,0],"slot":[0],"reader":[1,0],"way.\nSuch":[0],"skip":[0],"dure":[0],"build.":[0],"Use":[1,0],"add":[0],"ignore:":[0],"(eval-when":[0],"(:compile-toplevel":[0],":load-toplevel":[0],":execute)\n":[0],"(pushnew":[0],"'reblocks-auth/models:profile-user\n":[0],"40ants-doc:*symbols-with-ignored-missing-locations*))":[0],"Return":[0],"ignor":[1,0],"OBJ":[0],"Should":[0],"return":[1,0],"object":[1,0],"ignored-word":[0],"generic-function.":[0],"Add":[0],"documented\nor":[0],"entri":[0],"it\ncont":[0],"entity.":[0],"entity,":[0],"like:\n":[0],"40ants-doc/reference:make-refer":[0],"locative\nbound":[0],"name,":[0],"parenthesis.\nFor":[0],"docstring:":[0],"40ANTS-DOC/SOURCE-API:FIND-SOURCE.":[0],"\"See":[0],"40ants-doc/source-api:find-sourc":[0],"2":[1,0],".\"":[0],"because\nther":[0],"generic-funct":[1,0],"find-sourc":[0],"name:":[0],"40ANTS-DOC/SOURCE-API:FIND-SOURCE":[0],"as:":[0],"appear":[0],"result":[0],"documentation\nor":[0],"complex,":[0],"reference:":[0],"[40ANTS-DOC/SOURCE-API:FIND-SOURCE][(method":[0],"(40ants-doc/reference:reference))].":[0],"specifi":[1,0],"method:":[0],"Cross-referenc":[0],"addit":[0],"40ANTS-DOC/AUTODOC":[0],".\nThi":[0],"defautodoc":[0],"similar":[0],"fill":[0],"bring":[0],"dependencies:":[0],"cl-change-cas":[0],"cl-unicod":[0],"minimal.":[0],"care":[0],"doc":[0],"sybsystem.":[0],"Macro":[0],"collect":[1,0],"analyz":[0],"extern":[1,0],"symbols.\nIn":[0],"group":[0],"types.":[0],"(40ants/defautodoc":[0],"@api":[0],"(:system":[0],":cl-telegram-bot))":[0],"CL-TELEGRAM-BOT":[0],"wonder":[0],"handwritten\ndocument":[0],"@index":[0],"\"cl-telegram-bot":[0],"-":[1,0],"Telegram":[0],"Bot":[0],"API\")\n":[0],"(@instal":[0],"section)\n":[0],"(@quickstart":[0],"(@api":[0],"section))\n\nWhen":[0],"SHOW-SYSTEM-DESCRIPTION-P":[0],"NIL,":[0],"the\ndescript":[0],"Autodocument":[0],"Basic":[0],"work,":[1,0],"files:":[0],"Render":[0],"node":[1,0],"format.\nSupport":[0],":HTML":[0],":MARKDOWN":[0],"debug":[0],"itself.":[0],"disk.":[0],"default,":[0],"FORMAT":[0],"argument.\nSupport":[0],"absolut":[1,0],"pathnam":[0],"directori":[1,0],"first":[0],"value\nand":[0],"each":[0],"sections.":[0],"WARN-ON-UNDOCUMENTED-PACKAGES":[1,0],"there\nar":[0],"package-inf":[0],"but\nnot":[0],"Otherwise,":[1,0],"only\nin":[0],"least":[1,0],"CLEAN-URLS":[1,0],"rewrit":[0],"filenam":[0],"url":[1,0],"make\nit":[0],"site":[0],"show":[1,0],".html":[0],"inside.":[0],"Also,\nyou":[0],"BASE-URL":[0],"rendering\nmarkdown":[0],"DOWNCASE-UPPERCASE-CODE":[1,0],"be\ndowncased.":[0],"THEME":[0],"theme":[1,0],"class":[0],"name.":[1,0],"is\n":[0],"40ants-doc-full/themes/default:default-them":[0],"Custom":[1,0],"Theme":[1,0],"\nto":[0],"HIGHLIGHT-LANGUAGES":[0],"HIGHLIGHT-THEME":[0],"redefin":[0],"theme's\nset":[0],"Highlight.js.":[0],"Languag":[0],"where":[1,0],"each\nitem":[0],"languag":[0],"Highlight.j":[1,0],"a\nnam":[0],"theme.":[0],"preview":[0],"highlight":[1,0],"here":[1,0],"FULL-PACKAGE-NAMES":[1,0],"(default),":[0],"headers\nar":[0],"fulli":[0],"qualifi":[0],"form.":[0],"lot":[0],"documenting\na":[0],"infer":[1,0],"`references.json\nwith":[0],"give":[0],"files\na":[0],"entiti":[0],"Besid":[0],"render-to-str":[0],"render-to-fil":[0],"provided\n":[0],"serv":[0],"readm":[0],"system,\nposs":[0],"github.":[0],"migrat":[0],",\nthen":[0],"note,":[0],"replac":[1,0],"UPDATE-ASDF-SYSTEM-HTML-DOCS":[1,0],"UPDATE-ASDF-SYSTEM-README":[1,0],"generate\na":[0],"crosslink":[0],"docs.":[0],"you\ncan":[0],"ChangeLog.md":[1,0],":CHANGELOG-SECTIONS":[0],"argument.\nSe":[0],"Changelog":[0],"about\n":[0],"40ants-doc/changelog:defchangelog":[1,0],"helper.":[0],"Both":[0],":README-SECTIONS":[0],"single\nitem":[0],"list.":[0],"about":[1,0],"BASE-DIR":[0],"SOURCE-URI-FN":[0],",\n":[0],"arguments.":[1,0],"Exampl":[0],"usage:":[0],"(40ants-doc-full/builder:update-asdf-system-doc":[0],"40ants-doc-full/doc:@index\n":[0],":40ants-doc\n":[0],":readme-sect":[0],"40ants-doc-full/doc:@readme)":[0],"shorthand":[0],"All":[1,0],"argment":[0],"concanten":[0],".md.\nSome":[0],"symbols,":[1,0],"be\nlink":[0],"sites,\nthen":[0],":BASE-URL":[0],"site,":[0],"otherwise,":[0],"relative.":[0],"paramet":[0],":UPDATE-CSS-P":[0],":PAGES":[0],",\nbut":[0],"javascript":[0],"CSS":[1,0],"updat":[0],"automatically.":[1,0],"documentation\non":[0],"work.":[0],"wrapper":[0],"projects,\ntak":[0],"update-asdf-system-doc":[0],"features\nlik":[0],"github":[0],"stripe":[1,0],"\"Fork":[1,0],"Me\".":[0],"displai":[1,0],"sidebar":[0],"left,\nabov":[0],"tabl":[0],"contents.":[0],"form\n":[0],"(&KEY":[0],"TITLE":[0],"ID":[0],"LINKS)":[0],"top":[0],"div":[1,0],"id":[0],"LINKS":[0],"list\nof":[0],"(URI":[0],"LABEL)":[0],"elements.`":[0],"Is":[0],"yet.":[0],"Like":[0],"*document-html-top-blocks-of-links*":[0],"displayed\nbelow":[0],"simultaneously.\nThi":[0],"way,":[0],"formats,":[0],"not\n":[1,0],"40ants-doc:sect":[0],"objects,":[0],"PAGE":[0],"objects.":[1,0],"Page":[0],"additional\ninform":[0],"format.":[0],"belong":[0],"usual":[1,0],"different\nformats.":[0],"\"tutorial\"":[0],"both":[0],"introduct":[0],"tutorial:":[0],"@full-manu":[0],"\"Manual\")\n":[0],"(@introduction)\n":[0],"(@tutorial)\n":[0],"(@api)\n":[0],"(@changelog))\n\n(render-to-files\n":[0],"@full-manual\n":[0],"(40ants-doc-full/page:make-pag":[0],"@introduction\n":[0],"@tutorial)\n":[0],":markdown\n":[0],":base-filenam":[0],"\"README\")\n":[0],"@changelog\n":[0],"\"ChangeLog\")))":[0],"approach":[0],"function.":[1,0],"structur":[1,0],"way.\nWith":[0],"defchangelog":[0],"bodi":[0],"sublist":[0],"with\na":[0],"version":[0],"it'":[1,0],"descript":[0],"markdown\nformat.":[0],"documentation\nand":[0],"cross-link":[0],"example:":[0],"(defchangelog":[0],"(0.2.0\n":[0],"\"-":[0],"Featur":[0],"B":[0],"implemented.\n":[0],"fix":[1,0],"FOO.\")\n":[0],"(0.1.0\n":[0],"Project":[1,0],"[MGL-PAX](https://github.com/melisgl/mgl-pax).\n":[0],"implemented.\"))":[0],"recommend":[0],"commit":[0],"(see\n":[0],"someth":[1,0],"read\nwithout":[0],"them.":[1,0],"committed,":[0],"with\nthat:":[0],"make-github-source-uri-fn":[0],"),\nthe":[0],"link.":[1,0],"to\nb":[0],"regener":[0],"and\ncommit":[0],"followup":[0],"commit.":[0],"gh-page":[0],".\nYou":[0],"branch":[0],"point":[0],"Pages\nto":[0],"folder":[1,0],"branch.\nGood":[0],"http://sangsoonam.github.io/2019/02/08/using-git-worktree-to-deploy-github-pages.html":[0],".\nTwo":[0],"still,":[0],"somewhat":[0],"less":[0],"painful.":[0],"at\n":[0],"http://.github.io/":[0],"good\nidea":[0],"jumping\nbetween":[0],"site.":[0],"suitabl":[0],":SOURCE-URI-FN":[0],"of\nth":[0],"source\nloc":[0],"is\nfound,":[0],"path":[0],"made":[1,0],"rel":[0],"root":[0],"ASDF-SYSTEM":[0],"final":[0],"URI":[0],"returned.":[0],"The\n":[0],"https://github.com/melisgl/mgl-pax/blob/master/src/pax-early.lisp#L12\n":[0],"\"master\"":[0],"abov":[0],"come":[0],"GIT-VERSION":[0],"attempt":[0],"determin":[0],"to\ncurr":[0],".git":[0],"holding\n":[0],"found,":[0],"to\ngithub":[0],"generated.":[0],"GITHUB-URI":[0],"given,":[0],"to\nget":[0],"system'":[1,0],"description.":[1,0],"work,\nyour":[0],"(defsystem":[0],"40ants-doc\n":[0],"...\n":[0],":source-control":[0],"(:git":[0],"\"https://github.com/40ants/doc\")\n":[0],"...))))":[0],"signal":[0],"whenev":[0],"lookup\nfail":[0],"below":[0],"the\ndirectori":[0],"Set":[0],"argument.":[1,0],"40ants-doc/reference:refer":[0],"\nobject":[0],"web":[0],"where\nreferenc":[0],"viewed.":[0],"GitHub'":[0],"page.":[1,0],",\nthi":[0],"40ants-doc-full/github:make-github-source-uri-fn":[0],"if\n":[0],":SOURCE-CONTROL":[1,0],"slot.":[1,0],"details.":[0],"object\nif":[0],"*source-uri-fn*":[0],"Github":[0],"Workflow":[0],"\"World\"":[0],"registri":[0],"documents,":[0],"generate\ncross-link":[0],"registered\ndocuments.":[0],"now,":[0],"documentation\nsepar":[0],"CI":[0],"pipline.":[0],"somebodi":[0],"want'":[0],"libraries,":[0],"simultaneously,":[0],"I'd":[0],"entities,\nprovid":[0],"store":[0],"JSON":[0],"along":[0],"enumer":[0],"s.":[0],"Such":[0],"yet,":[0],"be\nus":[0],"built":[0],"Weblock":[0],".\nIf":[0],"feature,":[0],"please,":[0],"me":[1,0],"know.":[0],"PAX":[0],"World":[0],"library.":[1,0],"indent":[0],"styles.\n":[0],"converting:":[0],"(defun":[0],"foo":[0],"indented\n":[0],"differently\")":[0],"is\nindented\ndifferently\")":[0],"easily\nmess":[0],"markdown.":[0],"handl":[0],"leav":[0],"first\nlin":[0],"alone,":[0],"longest":[0],"of\nlead":[0],"space":[0],"non-blank":[0],"lines.\"":[0],"Indentat":[0],"highlighting,":[0],"github'":[0],"fenc":[0],"code\nblock":[0],"tripl":[0],"backtick":[0],"is\nwrite:":[0],"```elisp\n(defun":[0],"())\n```\n":[0],"get":[0],"syntact":[0],"tag,":[0],"example,\ni":[0],"option":[1,0],"commonlisp":[0],"Origin":[0],"color":[1,0],"syntax\nhighlighting,":[0],"to\nguess":[0],"specified.":[0],"minim":[0],"document's\nstat":[0],"size,":[0],"Hightlight.j":[0],"configur":[0],"languages:":[0],"bash":[0],"css":[0],"json":[0],"yaml":[0],"plain-text":[0],"html":[1,0],"instruct":[0],"to\nsupport":[0],"languages.":[0],"detection,":[0],"cool":[0],"Highlight.js\ni":[0],"view":[0],"themes:\n":[0],"https://highlightjs.org/static/demo/":[0],".\nThere":[0],"nice\nfeatur":[0],"Syntax":[0],"Displai":[0],"mathemat":[0],"TeX":[0],"via\nMathJax.":[0],"done":[1,0],"inlin":[1,0],"$":[0],"$\\int_0^\\infti":[0],"e^{-x^2}":[0],"dx=\\frac{\\sqrt{\\pi}}{2}$\n":[0],"diplai":[0],"e^{-x^2}\ndx=\\frac{\\sqrt{\\pi}}{2}$,":[0],"delimit":[0],"$$":[0],"$$\\int_0^\\infti":[0],"dx=\\frac{\\sqrt{\\pi}}{2}$$\n":[0],"get:":[0],"dx=\\frac{\\sqrt{\\pi}}{2}$$":[0],"MathJax":[1,0],"(includ":[0],"those":[0],"with\nbackticks)":[0],"alone.":[0],"Outsid":[0],"blocks,":[0],"escap":[1,0],"it\nwith":[0],"backslash":[0],"scare":[0],"off.":[0],"Escape":[0],"fragment":[0],"embed":[0],"Lisp\nstr":[0],"pain.":[0],"Python":[0],"String\nRead":[0],"help\nwith":[0],"that.":[0],"Support":[1,0],"assum":[0],"pretty\nmuch":[0],"verbatim":[0],"subject":[0],"knobs\ndescrib":[0],"below.":[0],"three":[0],"lowercase\ncharact":[0],"intern":[1,0],"if\nthei":[0],"especi":[0],"when\ncombin":[0],"40ants-doc-full/link:*document-link-code*":[0],"\"`FOO`":[0],"FOO.\"\n":[0],"equival":[0],"`FOO`.\"\n":[0],"class,":[0],"anchor":[0],"of\neveri":[0],"Also,":[1,0],"style\nrefer":[0],"a\ndocstr":[0],"the\nsect":[0],"documented.":[1,0],"Assume":[0],"BAR":[0],"defined,":[0],"for:":[0],"@foo\n":[0],"function))\n\n(defun":[0],"(x)\n":[0],"\"Call":[0],"`BAR`":[0],"`X`.\"\n":[0],"x))":[0],"[function]":[0],"X\n\n":[0],"Call":[0],"[`BAR`][1]":[0],"`X`.\n":[0],"Instead":[0],"[bar][]":[0],"[`bar`][]":[0],"well.\nSinc":[0],"pars":[1,0],"accord":[1,0],"READTABLE-CASE":[0],"character\ncas":[0],"matters.":[0],"Now,":[0],"type))\n\n(defun":[0],"interpretations:":[0],"`BAR`([`1`][link-id-1]":[0],"[`2`][link-id-2])":[0],"situat":[0],"class)":[0],"denot":[0],"40ants-doc/locatives:sect":[0],"locative).":[0],"Back":[0],"above,":[0],"clearly,\nther":[0],"wish":[0],"select\nth":[0],"One":[0],"to\nspecifi":[0],"link:":[0],"[BAR][function]":[0],"X.\"\n":[0],"immedi":[0],"or\naft":[0],"narrow":[0],"the\nrang":[0],"possibilities.":[0],"what":[0],"extension\ndoes.":[0],"nutshell,":[0],"question":[0],"So":[0],"without\nani":[0],"markup:":[0],"last":[0],"a\nsingl":[0],"*DOCUMENT-LINK-CODE*":[0],"combin":[0],"40ants-doc-full/builder/printer:*document-uppercase-is-code*":[0],"for\nuppercas":[0],"quot":[1,0],"non-neg":[0],"integer.":[0],"hierarchy,":[0],"less\nthan":[0],"3.1.2":[0],"to\n0":[0],"Printer":[0],"Variabl":[1,0],"all\nloc":[0],"types,":[0],"it\nobvi":[0],"kind":[0],"Unless":[0],"otherwis":[0],"noted,\nloc":[0],"locatives.":[0],"forward":[0],"declar":[0],"locatives.\nTo":[0],"system\nwhich":[0],"include\nmeta":[0],"inform":[1,0],"also\nserv":[0],"the\ncurr":[0],"consequ":[0],"exported.":[0],"titl":[0],"modifi":[0],"you'll\ndefin":[0],"40ants-doc/locatives/asdf-system:asdf-system-documentation-titl":[1,0],"generic-function.\nUs":[0],"EQL":[0],"method.":[0],"specializer\nto":[0],"shorter":[1,0],"remov":[1,0],"it.":[0],"40ants-doc:defsect":[1,0],"special":[0],"variable.":[0],"INITFORM":[0],"specified,\nth":[0],"DEFCONSTANT":[0],"constant":[1,0],"arglist":[0],"qualiti":[0],"SWANK-BACKEND:ARGLIST":[0],"default\nvalu":[0],"missing.":[0],"CL:FIND-METHOD":[0],"arguments.\nTo":[0],"generic\nfunct":[0],"t)))":[0],"accessor":[0],"FOO-SLOT":[0],"class\n":[0],"(foo-slot":[0],"(accessor":[0],"foo))":[0],"writer":[0],"(writer":[0],"synonym":[0],"often\nugli":[0],"certainli":[0],"uninform":[0],"lambda":[0],"printed.":[0],"well,":[0],"better":[1,0],"the\nmor":[0],"specif":[0],"Another":[1,0],"type\nspecifiers.":[0],"non-specif":[0],"context.":[0],"Useful":[0],"preventing\nautolinking.":[0],"`FOO`\n":[0],"(if":[0],"[`FOO`][dislocated]\n":[0],"be.":[0],"On":[0],"disloc":[0],"40ants-doc/locatives/base:loc":[0],"40ants-doc/locatives/base:locate-error":[0],"condition.":[0],"An":[1,0],"alia":[0],"40ants-doc/locatives:disloc":[0],"a\nmacro":[0],"accident":[0],"name\na":[0],"CL:FORMAT":[0],"it):":[0],"DOCUMENT.\"":[0],"Sinc":[0],"locative,":[0],"writing:":[0],"on\n":[0],"(VARIABLE":[0],"possible\nto":[0],"land":[0],"(40ANTS-DOC/LOCATIVES/BASE:DEFINE-LOCATIVE-TYPE":[0],"VARIABLE":[0],"...)":[0],"form.\nSimilarly,":[0],"(LOCATIVE":[0],"region":[0],"file.":[1,0],"SOURCE":[0],"a\npathnam":[0],"whole":[0],"can\nexplicitli":[0],"suppli":[0],"START":[0],"END":[0],"to\ninclud":[0],"non-lisp":[0],"(sai":[0],"elisp\na":[0],"example)":[0],"files.":[0],"can\nreduc":[0],"clutter":[0],"duplication.":[0],"example-sect":[0],"(pax.el":[0],"#.(asdf:system-relative-pathnam":[0],":40ants-doc":[0],"\"elisp/pax.el\")\n":[0],":lang":[0],"\"elisp\"))\n":[0],"(foo-exampl":[0],"(:start":[0],":end":[0],"(end-of-foo-exampl":[0],"variable))\n":[0],"\"commonlisp\")))\n\n(defun":[0],"x))\n\n;;;":[0],"verbatim,":[0],"survive.\n(defmacro":[0],"bar":[0],"())\n\n;;;":[0],"FOO-EXAMPLE's\n;;;":[0],"sinc":[0],"dummi":[0],"END-OF-FOO-EXAMPLE\n;;;":[0],"end":[1,0],"location.\n(defvar":[0],"end-of-foo-example)\n\n;;;":[0],"More":[0],"irrelev":[0],"follows.":[0],"pax.el":[0],"open":[0],"character.":[1,0],"FOO-EXAMPLE":[0],"(asdf:system\nlocative)":[0],"entir":[0],"is\ninclud":[0],"block.":[0],"location\nof":[0],"(inclusive)":[0],"\nloc":[0],"(exclusive).":[0],"begin":[0],"end\nof":[0],"file,":[0],"respectively.":[0],":START":[0],":END":[0],"be\nth":[0],"same.":[0],"designator,":[0],"absolute\nso":[0],"context":[0],"independent.":[0],"Creat":[0],"form.\nAlso,":[0],":LANG":[1,0],"specified.\nThi":[0],"results\nof":[0],"code'":[0],"evaluation.":[0],"@exampl":[0],"(describe-output":[0],"(stdout-of":[0],"(format":[0],"\"Hello":[0],"World!\"))))":[0],"Result":[0],"block,":[0],"like:":[1,0],"```markdown\nHello":[0],"World!\n```\n":[0],"hang":[0],"restart":[0],"a\nsymbol.":[0],"(define-restart":[0],"my-ignore-error":[0],"\"Availabl":[0],"MY-ERROR":[0],"signalled,":[0],"MY-IGNORE-ERROR":[0],"unsaf":[0],"continues.\")":[0],"CL:RESTART":[0],"no\ncorrespond":[0],"condit":[0],"glossari":[0],"term\nobject.":[0],"on.":[0],"It\ni":[0],"that,":[0],"to,":[0],"instead":[1,0],"Unlike":[0],"sections\nthough,":[0],"headings,":[0],"lightweight":[0],"bullet":[1,0],"+":[0],"name/titl":[0],"style.":[0],"40ants-doc:*discard-documentation-p*":[0],"DOCSTRING":[0],"40ants-doc/glossary:define-glossary-term":[0],"helper":[0],"compar":[0],"Compar":[0],"Each":[0],"arug":[0],"Out":[0],"box,":[0],"themes:":[0],"40ants-doc-full/themes/light:light-them":[0],"40ants-doc-full/themes/dark:dark-them":[0],"\nfunction.":[0],"Or":[0],"contruct":[0],"And":[0],"cause,":[0],"theme!":[0],"control":[0],"rendering,":[0],"highlighting.":[0],"simplest":[0],"custom":[0],".\nHere":[0],"orang":[0],"background:":[0],"(defclass":[0],"my-them":[0],"(default-theme)\n":[0],"())\n\n(defmethod":[0],"40ants-doc-full/themes/api:render-css":[0],"((theme":[0],"my-theme))\n":[0],"(concatenate\n":[0],"'string\n":[0],"(call-next-method)\n":[0],"(lass:compile-and-write\n":[0],"`(body\n":[0],":background":[0],"orange))))":[0],"highlighter:":[0],"(defmethod":[0],"40ants-doc-full/themes/api:highlight-them":[1,0],"\"atom-one-light\")":[0],"Talk":[0],"of\nlanguag":[0],"highlight:":[0],"40ants-doc-full/themes/api:highlight-languag":[1,0],"\"lisp\"\n":[0],"\"python\"\n":[0],"\"bash\"))":[0],"Chang":[0],"Color":[0],"entry-point":[0],"render-pag":[0],"other\nrend":[0],"inherit":[0],"order:":[0],"right":[0],"demonstr":[0],"order":[0],"called:":[0],"green":[0],";":[0],"blue":[0],"render-page-head":[0],"violet":[0],"render-sidebar":[0],"red":[0],"render-sidebar-head":[0],"yellow":[0],"render-sidebar-cont":[0],"render-sidebar-foot":[0],"salad":[0],"render-cont":[0],"pink":[0],"render-page-foot":[0],"Some":[0],"render-toc":[0],"render-search-form":[0],"content\nand":[0],"render-html-head":[0],"generic-function\nto":[0],"metadata":[0],"stylesheet":[0],"js":[0],"title,":[0],"changes,":[0],"exist":[0],"class\nand":[0],"properties.":[0],"is\na":[0],"40A":[0],"nt":[0],"projects.":[0],"header,":[0],"footer":[1,0],"match\nth":[0],"Layout":[0],"Availabl":[0],"Definit":[0],"Protocol":[0],"snippets.":[0],"Deprecated!":[0],"2024-11-13.\nPass":[0],"highlighj":[0],"plugin.":[0],"themes,":[0],"site:":[0],"Will":[0],"callabl":[0],"CONTENT-FUNC":[0],"HEAD":[0],"tag.":[1,0],"header.":[0],"Doe":[0],"noth":[0],"default.":[1,0],"footer.":[0],"page'":[0],"content.":[0],"wrap":[0],"funcal":[0],"sidebar'":[0],"input.":[0],"TOC":[1,0],"plugins.":[0],"Plugin":[0],"small":[0],"to\ninject":[0],"directory.":[1,0],"highlightj":[0],"plugin":[1,0],"enabled,":[0],"creating\na":[0],"plugins:":[0],"\"Example\")\n":[0],"\"MathJax":[0],"example:\n\n":[0],"1.":[0],"$a":[0],"ne":[0],"0$\n":[0],"2.":[0],"$x":[0],"=":[0],"{-b":[0],"pm":[0],"sqrt{b^2-4ac}":[0],"over":[0],"2a}.$\")\n\n(40ants-doc-full/builder:render-to-files\n":[0],"@index\n":[0],":base-dir":[0],"\"/tmp/output/\"\n":[0],":theme":[0],"'40ants-doc-full/themes/light:light-theme\n":[0],":plugin":[0],"(list\n":[0],"(highlightjs)\n":[0],"(mathjax))))":[0],"inject":[0],"asset":[1,0],"TARGET-DIR":[0],"nothing.":[0],"insert":[0],"\"escaping\"":[0],"so\nth":[0],"plugin'":[0],"respons":[0],"input'":[0],"necessary.":[0],"Built-in":[0],"Highlightj":[0],"(highlightj":[0],"\"magula\"\n":[0],":languag":[0],"'(\"lisp\"":[0],"\"python\"))))":[0],"While":[0],"Common":[1,0],"Lisp":[1,0],"rather":[0],"introspect":[0],"abilities,":[0],"not\neveryth":[0],"class.":[0],"object\nrepres":[0],"(DEFVAR\nFOO)":[0],"(40ANTS-DOC/REFERENCE:MAKE-REFERENCE":[0],"'FOO":[0],"'VARIABLE)":[0],"construct":[0],"that\ncaptur":[0],"(the":[0],"an\nent":[0],"interest":[0],"(for":[0],"variable).\nTh":[0],"appli":[0],"an\nobject":[0],"(locat":[0],"'foo":[0],"'variable)":[0],"'FOO\n'VARIABLE)":[0],"Operat":[0],"know":[0],"references\nwhich":[0],"40ants-doc/locatives/base:locate-and-find-sourc":[0],"Naturally,":[0],"(40ANTS-DOC/LOCATIVES/BASE:LOCATE":[0],"'FUNCTION)":[0],"simpli":[0],"#'FOO":[0],"no\nne":[0],"muck":[0],"perfectli":[0],"Follow":[0],"LOCATIVE":[0],"OBJECT":[0],"the\nlocation.":[0],"ERRORP":[0],"locate-error":[0],"when\nth":[0],"lookup":[0],"fails.":[0],"Signal":[0],"\ni":[0],"true.":[0],"REFERENCE":[0],"its\nlocative.":[0],"repres":[0],"reference-loc":[0],")\nto":[0],"reference-object":[0],"then\nit'":[0],"Typically,":[0],"functions\nwork":[0],"arg":[0],"as\nsepar":[0],"eql":[0],"REST":[0],"().":[0],"new\nobject":[0],"type,":[0],"40ants-doc-full/commondoc/builder:to-commondoc":[0],"function.\nAnd":[0],"40ants-doc/locatives/base:locate-object":[0],"defined.\nAlso,":[0],"40ants-doc/reference-api:canonical-refer":[0],"generic-function\nne":[0],"opposit":[0],"action.":[0],"Finally,":[0],"40ants-doc:exportable-locative-type-p":[0],"generic-function\nmai":[0],"overridden":[0],"sense.\nHer":[0],"done\nfor":[0],"asdf:system":[0],"(define-locative-typ":[0],"\"Refer":[0],"include\n":[0],"meta":[0],"also\n":[0],"exported.\n\n":[0],"you'll\n":[0],"40ANTS-DOC/LOCATIVES/ASDF-SYSTEM:ASDF-SYSTEM-DOCUMENTATION-TITLE":[0],"generic-function.\n":[0],"method.\")\n\n\n(defun":[0],"find-system":[1,0],"(name)\n":[0],"\"ASDF:FIND-SYSTEM":[0],"1000":[0],"slower":[0],"ASDF:REGISTERED-SYSTEM,\n":[0],"REGISTERED-SYSTEM":[0],"sometim":[0],"unabl":[0],"example\n":[0],"defpackag":[0],"defines\n":[0],"nicknam":[0],"equal":[0],"log4cl-extras/cor":[0],"example).\n\n":[0],"fast":[0],"fallback":[0],"slow":[0],"one.\"\n":[0],"(asdf:registered-system":[0],"name)\n":[0],"(asdf:find-system":[0],"name)))\n\n\n(defmethod":[0],"locate-object":[0],"(locative-typ":[0],"(eql":[0],"'asdf:system))\n":[0],"locative-args)\n":[0],"(assert":[0],"(endp":[0],"locative-args))\n":[0],"FIXME:":[0],"hell.\n":[0],"TODO:":[0],"registered-system":[0],"helped\n":[0],"(find-system":[0],"symbol)\n":[0],"(locate-error)))\n\n(defmethod":[0],"canonical-refer":[0],"((system":[0],"asdf:system))\n":[0],"(40ants-doc/reference:make-refer":[0],"(asdf:primary-system-nam":[0],"system)\n":[0],"'asdf:system))\n\n(defmethod":[0],"`(:location\n":[0],"(:file":[0],",(namestr":[0],"(asdf/system:system-source-fil":[0],"system)))\n":[0],"(:posit":[0],"1)\n":[0],"(:snippet":[0],"\"\")))\n\n(defmethod":[0],"to-commondoc":[0],"((titl":[0],"(asdf-system-documentation-titl":[0],"(flet":[0],"((item":[0],"getter":[0],"type)\n":[0],"(let*":[0],"((valu":[0],"(funcal":[0],"system))\n":[0],"(href":[0],"nil))\n":[0],"value\n":[0],"(case":[0],"type\n":[0],"(:link":[0],"(setf":[0],"href":[0],"value))\n":[0],"(:mailto":[0],"\"mailto:~A\"\n":[0],"value)))\n":[0],"(:source-control":[0],"(psetf":[0],"\"~A\"\n":[0],"(first":[0],"(second":[0],"value))))\n":[0],"(make-list-item\n":[0],"(make-paragraph\n":[0],"(cond\n":[0],"((eql":[0],":asdf-systems)\n":[0],"(make-content\n":[0],"(list*\n":[0],"(make-text\n":[0],"\"~A:":[0],"\"\n":[0],"name))\n":[0],"(loop":[0],"t\n":[0],"system-nam":[0],"first\n":[0],"nil)\n":[0],"else\n":[0],"(make-text":[0],"\",":[0],"\")\n":[0],"(make-web-link":[0],"\"https://quickdocs.org/~A\"\n":[0],"system-name)\n":[0],"system-name))))))\n":[0],"(href\n":[0],"href\n":[0],"value)))))\n":[0],"(t\n":[0],"~A\"\n":[0],"name\n":[0],"value))))))))))\n":[0],"(item":[0],"\"Version\"":[0],"'asdf/component:component-version)\n":[0],"\"Description\"":[0],"'asdf/system:system-description)\n":[0],"\"Licence\"":[0],"'asdf/system:system-licence)\n":[0],"\"Author\"":[0],"'asdf/system:system-author)\n":[0],"\"Maintainer\"":[0],"'asdf/system:system-maintainer)\n":[0],"\"Mailto\"":[0],"'asdf/system:system-mailto\n":[0],":mailto)\n":[0],"\"Homepage\"":[0],"'asdf/system:system-homepage\n":[0],":link)\n":[0],"\"Bug":[0],"tracker\"":[0],"'asdf/system:system-bug-tracker\n":[0],"\"Sourc":[0],"control\"":[0],"'asdf/system:system-source-control\n":[0],":source-control)\n":[0],"\"Depend":[0],"on\"":[0],"'asdf-system-dependencies\n":[0],":asdf-systems)))\n":[0],"(children":[0],"(make-unordered-list\n":[0],"(remov":[0],"items)))\n":[0],"(refer":[0],"(40ants-doc/reference-api:canonical-refer":[0],"(make-section-with-refer":[0],"title\n":[0],"children\n":[0],"reference)))))\n\n":[0],"Declar":[0],"locative-typ":[0],"two\nth":[0],"return:":[0],"place":[0],"and\nsemant":[0],"(in":[0],"LAMBDA-LIST":[0],");":[0],"second,\nb":[0],"(LOCATIVE-TYPE":[0],"if\nyou":[0],"have:":[0],"(&option":[0],"initform)\n":[0],"\"Dummi":[0],"docstring.\")":[0],"LOCATIVE-TYPE":[0],"T,":[0],"when\nit":[0],"EXPORT":[0],"object,":[0],"locative\nrefer.":[0],"this\nreturn":[0],"(FIND-PACKAGE":[0],"SYMBOL)":[0],"by\ncal":[0],"other\nerror":[0],"bad,":[0],"instance\n":[0],"LOCATIVE-ARGS":[0],"empti":[0],"canon":[0],"sens":[0],"that\ncal":[0],"reference.\nFor":[0],"only,":[0],"directly.":[0],"FORMAT-AND-ARGS":[0],"and\narg":[0],"locate-error-messag":[0],"is\nconstructed.":[0],"messag":[1,0],"\ntoo.":[0],"by\n":[0],"resign":[0],"resolv":[1,0],"SWANK:FIND-DEFINITION-FOR-THING":[0],"this\non":[0],"extensible.":[0],"default\nimplement":[0],"defer":[0],"40ants-doc-full/swank:locate-definition-for-emac":[0],"lies\nbehind":[0],"successful,":[0],"(:locat":[0],"\"/home/mega/own/mgl/pax/test/test.lisp\")\n":[0],"24)":[0],"nil)":[0],"snippet":[0],"optional.":[0],"position\n1":[0],"unsuccessful,":[0],"is\nlike:":[0],"(:error":[0],"\"Unknown":[0],"SOMETHING\")":[0],"object's\ndocument":[0],"Function":[1,0],"COMMON-DOC:DOCUMENT-NODE":[0],"standard":[0],"locative,\nnam":[0],"arguments,":[0],"40ants-doc-full/commondoc/bullet:make-bullet":[0],"item.":[0],"ARGLIST":[0],"given,\nthen":[0],"reference'":[0],"representation.":[0],"CHILDREN":[0],"nodes\nor":[0],"node.":[0],"IGNORE-WORDS":[0],"documentation,\nthen":[0],"DISPLOCATED-SYMBOLS":[0],"Recurs":[0],"NODE":[0],"FUNC":[0],"call.":[0],"We":[0],"types\nsupport":[0],"COMMON-DOC:CHILDREN":[0],"share":[0],"type.":[0],"track":[0],"piece'":[0],"accordingly.":[1,0],"Adding":[0],"New":[0],"Object":[1,0],"Let'":[0],"is\nno":[0],"interest.":[0],"Recall\nthat":[0],"case:":[0],"(40ants-doc/locatives/base:locate\n":[0],"'40ants-doc:*discard-documentation-p*\n":[0],"'variable)\n==>":[0],"#<40ANTS-DOC/REFERENCE:REFERENCE":[0],"40ANTS-DOC:*DISCARD-DOCUMENTATION-P*":[0],"(VARIABLE)>":[0],"generic-function,\nwhich":[0],"argument\nlist":[0],"pleasure.":[0],"defined.\nPai":[0],"attent":[0],"40ants-doc-full/commondoc/builder:reference-to-commondoc":[0],"no\na":[0],"argument:":[0],"INITFORM,":[0],"specified,\n":[0],"documentation.\")\n\n(defmethod":[0],"'variable))":[0],"(<=":[0],"(length":[0],"locative-args)":[0],"(con":[0],"locative-args)))\n\n\n(defmethod":[0],"((symbol":[0],"symbol)":[0],"(destructuring-bind":[0],"(initform":[0],"initformp))":[0],"locative-args\n":[0],"((refer":[0],"(canonical-reference\n":[0],"symbol\n":[0],"locative-type\n":[0],"locative-args))))\n":[0],"(docstr":[0],"(40ants-doc/docstring:get-docstr":[0],"'variable))\n":[0],"(arglist":[0],"(multiple-value-bind":[0],"unboundp)":[0],"(40ants-doc-full/utils::symbol-global-valu":[0],"(cond":[0],"(initformp\n":[0],"(prin1-to-str":[0],"initform))\n":[0],"(unboundp":[0],"\"-unbound-\")\n":[0],"docstring\n":[0],"(parse-markdown":[0],"docstring))))\n\n":[0],"(40ants-doc-full/commondoc/bullet:make-bullet":[0],"reference\n":[0],":arglist":[0],"arglist\n":[0],":children":[0],":dislocated-symbol":[0],"symbol))))\n\n(defmethod":[0],"locate-and-find-sourc":[0],"(40ants-doc-full/locatives/utils::find-one-loc":[0],"(swank-backend:find-definit":[0],"'(\"variable\"":[0],"\"defvar\"":[0],"\"defparameter\"\n":[0],"\"special-declaration\")))\n\n":[0],"non-reference,":[0],"generic-function\nwith":[0],"els":[0],"object,\nlocative-type,":[0],"locative-arg":[0],"this\nfunct":[0],"essenti":[0],"purpos":[0],"has\ndiffer":[0],"\nwhich":[0],"expand":[0],"for\ninstance,":[0],"defun":[0],"symbol.\n":[0],"non-nil":[0],"if\nobject":[0],"(40ants-doc/source-api:find-sourc":[0],"(40ants-doc/reference:reference)))":[0],"'(NIL":[0],"(40ANTS-DOC/REFERENCE:REFERENCE))":[0],"basic":[0],"based\nextensions.":[0],"obscure\n":[0],"define-symbol-locative-typ":[0],"define-definer-for-symbol-locative-typ":[0],"to\nsimplifi":[0],"task":[0],"associ":[0],"documentation\nwith":[0],"certain":[0],"Similar":[0],"40ants-doc/locatives/base:define-locative-typ":[0],"things\nlocat":[0],"defined\nwith":[0],"40ants-doc/locatives/define-definer:define-definer-for-symbol-locative-typ":[0],".\nIt":[0],"attach":[0],"particular":[0],"clear:":[0],"(define-symbol-locative-typ":[0],"direct":[0],"(After":[0],"`M-.`":[0],"`DIRECTION":[0],"LOCATIVE`\n":[0],"DEFSECTION":[0],"forms.)\")\n\n(define-definer-for-symbol-locative-typ":[0],"define-direct":[0],"direction\n":[0],"\"With":[0],"DEFINE-DIRECTION":[0],"when\ninterpret":[0],"direction.\")\n\n(define-direct":[0],"\"UP":[0],"coordin":[0],"delta":[0],"(0,":[0],"-1).\")":[0],"this,":[1,0],"(UP":[0],"DIRECTION)":[0],"\nform":[0],"above.":[0],"documentation,\na":[0],"lambda-list":[0],"macro'":[0],"&OPTIONAL":[0],"been":[0],"40ants-doc-full/locatives/definers:define-symbol-locative-typ":[0],"dissect":[0],"since\n":[0],"needs.":[0],"plausible\nthat":[0],"subclass":[0],"are\npresented.":[0],":NAME":[0],":PACKAGE":[0],":READTABLE":[0],":ENTRIES":[0],"is\nthi":[0],"*PACKAGE*":[0],"*READTABLE*":[0],"generating\ndocument":[0],"STRING":[0],"Used":[0],"the\nord":[0],"about.":[0],"What":[0],"for?":[0],"tutorial,":[0],"often":[0],"wants\nto":[0],"REPL":[0],"coupl":[0],"of\nform":[0],"shown.":[0],"function's\ndocstr":[0],"concret":[0],"values\nspeak":[0],"volumes.":[0],"repl\nsession,":[0],"light":[0],"return\nvalues,":[0],"(i.e.":[0],"prompt)":[0],"\ntranscript":[0],"forms,":[0],"or\nonli":[0],"ones.":[0],"itself":[0],"be\neasili":[0],"worri":[0],"out-of-sync":[0],"code.\nThi":[0],"solv":[0],"back":[1,0],"transcripts.\nIn":[0],"exactli":[0],"happen":[0],"documentation\ngener":[0],"Code":[1,0],"are\nretranscrib":[0],"inconsist":[0],"(that":[0],"is,":[0],"difference\nin":[0],"values).":[0],"an\nerror":[0],"being\ndocumented.":[0],"beyond":[0],"test":[0],"readabl":[0],"2)\n=>":[0],"3\n\n(valu":[0],"2)":[0],"all,":[0],"handi":[0],"combined\nwith":[0],"triple-quot":[0],"nest":[1,0],"noise.":[0],"syntax\ncan":[0],"with:":[0],"(in-readt":[0],"pythonic-string-syntax)\n":[0],"Typic":[0],"usag":[0],"within":[0],"simple:":[0],"lisp\nform":[0],"level.":[0],"Move":[0],"the\ncursor":[0],"evalu":[0],"C-x":[0],"C-e":[0],"#\\^":[0],"docstring.\n\n```cl-transcript\n(valu":[0],"2))^\n```\n":[0],"tag\n":[0],"tell":[0],"perform":[0],"at\ndocument":[0],"time.":[0],"invok":[0],"emac":[0],"command":[0],"mgl-pax-transcribe-last-express":[0],"cursor\ni":[0],"becomes:":[0],"2)\n^\n":[0],":HELLO-WORLD":[0],"second\nreturn":[0],"value:":[0],":hello-world)":[0],"(1\n":[0],"arbitrary.\n":[0],"2)\n":[0],"a\na":[0],"warning:":[0],"WARNING:\n":[0],"error.":[0],"Inconsist":[0],"found.\n\nSource:\n":[0],"\"HELLO\"\n\nOutput:\n":[0],"\"HELLO-WORLD\"\n\nForm:\n":[0],"\"(valu":[0],"2))\"\n":[0],"the\nfirst":[0],"by\nmark":[0],"|":[0],"^":[0],"in\nth":[0],"|(valu":[0],"40ants-doc-retranscribe-region":[0],"HELLO-WORLD\n=>":[0],":HELLO-WORLD\n=>":[0],"left":[0],"alone\nbut":[0],"updated.":[0],"Alternatively,":[0],"40ants-doc-transcribe-last-express":[0],"emit":[0],"2))\n;..":[0],"HELLO\n;=>":[0],":HELLO\n;=>":[0],"produc":[0],"outsid":[0],"into\nnon-com":[0],"markup.":[0],"general,":[0],"numer":[0],"the\nindex":[0],"40ants-doc-full/transcribe:*syntaxes*":[0],"Without":[0],"a\nprefix":[0],"the\nmarkup":[0],"level,\nbut":[0],"too:":[0],"2))\n;;;;":[0],"HELLO\n;;;;":[0],":HELLO\n;;;;":[0],"your\nEmac":[0],"initi":[0],"elisp/transcribe.el":[0],"transcription\n\n(defun":[0],"40ants-doc-lisp-ev":[0],"(form)\n":[0],"((and":[0],"(fboundp":[0],"'sly-connected-p)\n":[0],"(sly-connected-p))\n":[0],"(sly-ev":[0],"form))\n":[0],"'slime-connected-p)\n":[0],"(slime-connected-p))\n":[0],"(slime-ev":[0],"(error":[0],"\"Nor":[0],"SLY,":[0],"nor":[1,0],"connect":[0],"Lisp.\"))))\n\n\n(defun":[0],"(slime-eval-last-expression)":[0],"that\ninsert":[0],"sexp":[0],"point,":[0],"this\ndo":[0],"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE.":[0],"prefix\nargu":[0],"Lisp\n40ANTS-DOC-FULL/TRANSCRIBE:*SYNTAXES*":[0],"SYNTAX":[0],"40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE.\nWithout":[0],"used.\"\n":[0],"(interactive)\n":[0],"(insert\n":[0],"((end":[0],"(point))\n":[0],"(start":[0],"(backward-sexp)\n":[0],"(move-beginning-of-lin":[0],"(point))))\n":[0],"(40ants-doc-transcrib":[0],"(40ants-doc-transcribe-syntax-arg)\n":[0],"nil)))))\n\n(defun":[0],"end)\n":[0],"\"Update":[0],"(a":[0],"calling\n40ANTS-DOC-FULL/TRANSCRIBE:TRANSCRIBE":[0],":UPDATE-ONLY":[0],"T).":[0],"input":[0],"be\nchanged.\"\n":[0],"(interact":[0],"\"r\")\n":[0],"((point-at-start-p":[0],"start)))\n":[0],"otherwise\n":[0],"block'":[0],"wrong":[0],"fail\n":[0],"(goto-char":[0],"start)\n":[0],"start\n":[0],"((transcript":[0],"end\n":[0],"nil)))\n":[0],"point-at-start-p\n":[0],"(delete-region":[0],"(insert":[0],"transcript))\n":[0],"end))\n":[0],"transcript)))))\n\n(defun":[0],"40ants-doc-transcribe-syntax-arg":[0],"current-prefix-arg\n":[0],"(prefix-numeric-valu":[0],"current-prefix-arg)\n":[0],"nil))\n\n(defun":[0],"40ants-doc-transcrib":[0],"update-onli":[0],"echo\n":[0],"first-line-special-p)\n":[0],"((transcription\n":[0],"(40ants-doc-lisp-eval\n":[0],"`(cl:if":[0],":40ants-doc-full/transcribe)\n":[0],"(uiop:symbol-cal":[0],":40ants-doc-full/transcrib":[0],":transcribe-for-emacs\n":[0],",(buffer-substring-no-properti":[0],"',syntax":[0],"',update-onli":[0],"',echo":[0],"',first-line-special-p)\n":[0],"t))))\n":[0],"t)\n":[0],"\"40ANTS-DOC":[0],"loaded.\")\n":[0],"transcription)))\n\n":[0],"Transcrib":[0],"INPUT":[0],"ECHO":[0],"OUTPUT":[0],"\nfollow":[0],"EVAL":[0],"string,":[0],"a\nstream":[0],"goe":[0],"string.":[1,0],"The\nreturn":[0],"was\nconstructed.":[0],"(transcrib":[0],"\"(princ":[0],"42)":[0],"nil)\n=>":[0],"42)\n..":[0],"42\n=>":[0],"42\n\"":[0],"confus":[0],"documentation\nus":[0],"transcrib":[0],"it\ndifferently.":[0],"contents:":[0],"2))":[0],"to:":[0],"Output":[0],"captur":[0],"with\nth":[0],":OUTPUT":[0],"\"..\"":[0],"printed\nwith":[0],":READABLE":[0],"\"=>\"":[0],"are\nalwai":[0],"facilit":[0],"parsing.":[0],"Update":[1,0],"the\nprevi":[0],"exactly.":[0],"remove\nal":[0],"markers,":[0],"placehold":[0],"marker":[0],"and\npass":[0],"source:":[0],"2))\n=>":[0],"UPDATE-ONLY":[0],"if\nther":[0],"source.":[0],"Similarly,":[0],"value\nmark":[0],"No":[0],"Output/Valu":[0],"values,":[0],"whether":[0],"or\nnot":[0],"INCLUDE-NO-OUTPUT":[0],"INCLUDE-NO-VALUE":[0],"default,\nneith":[0],"so:":[0],"(values)\n..\n=>":[0],"(values)":[0],"wouldn't":[0],"lose":[0],"those\nmark":[0],"reason.":[0],"Hence,":[0],"true.\nSo":[0],":NO-VALUE":[0],"prefix.":[1,0],"Consist":[0],"Check":[0],"CHECK-CONSISTENCY":[0],"continuable\n":[0],"transcription-output-consistency-error":[0],"form'":[0],"a\nstr":[0],"\ncontain":[0],"Similary,":[0],"transcription-values-consistency-error":[0],"read\nfrom":[0],"hand-ind":[0],"failing\nconsist":[0],"checks:":[0],"Unreadabl":[0],"Valu":[0],"scheme":[0],"involv":[0],"READ":[0],"unread":[0],"values\ncannot":[0],"treat":[0],"be\nprint":[0],"back:":[0],"some-class":[0],"((obj":[0],"some-class)":[0],"(obj":[0],"\\\"~%~%end\\\")))\n\n(make-inst":[0],"'some-class)\n==>":[0],"#\n-->":[0],"end>":[0],"\"==>\"":[0],":UNREADABLE":[0],"\"-->\"":[0],"is\nth":[0],":UNREADABLE-CONTINUATION":[0],"outputs,":[0],"consistency\ncheck":[0],"from\n":[1,0],"=.":[0],"is\nprint":[0],"value.":[0],"any\nchang":[0],"break":[0],"checks.":[0],"is\nmost":[0],"troublesom":[0],"instanc":[0],"default\n":[0],"PRINT-OBJECT":[0],"memori":[0],"address.":[0],"currently\nno":[0],"remedi":[0],"except":[0],"not\ntranscrib":[0],"emploi":[0],"output\nand":[0],"read,":[0],"for\neach":[0],"match":[0],"all\nsyntax":[0],"INPUT-SYNTAXES":[0],"against":[0],"line.":[0],"or\nvalu":[0],"remain":[0],"undetermined.":[0],"written,":[0],"DEFAULT-SYNTAX":[0],"OUTPUT-SYNTAXES":[0],"If\n":[0],"determined)":[0],"form,":[1,0],"syntax\nif":[0],"used.":[0],"execut":[0],"code,\nus":[0],":DEFAULT-SYNTAX":[0],":COMMENTED-1":[0],"'some-class)\n;==>":[0],"#\n;-->":[0],"end>\n\n(list":[0],"2)\n;=>":[0],"(1\n;->":[0],"translat":[0],"uncom":[0],"syntax,\nus":[0],":DEFAULT":[0],"(the\ndefault),":[0],"input\na":[0],"much":[0],"writing\nlin":[0],"(SYNTAX-ID":[0],"&REST":[0],"PREFIXES)":[0],"where\n":[0],"(PREFIX-ID":[0],"PREFIX-STRING)":[0],"elements.":[0],"For\nexampl":[0],"(:commented-1\n":[0],"(:output":[0],"\";..\")\n":[0],"(:no-valu":[0],"\";=>":[0],"value\")\n":[0],"(:readabl":[0],"\";=>\")\n":[0],"(:readable-continu":[0],"\";->\")\n":[0],"(:unread":[0],"\";==>\")\n":[0],"(:unreadable-continu":[0],"\";-->\"))":[0],"everi":[0],"except\nfor":[0],":READABLE-CONTINUATION":[0],"miss":[1,0],"\nsyntax),":[0],"PRIN1":[0],"(henc":[0],"lines).":[0],"writing,":[0],"extra":[0],"empty.":[0],"the\nprefix":[0],"discard":[0],"reading.":[0],"actual":[0],"selected.":[0],"Repres":[0],"error":[0],"argument\nof":[1,0],"superclass":[0],"transcription-consistency-error":[0],"(with":[0],"CERROR":[0],"invoked\nwith":[0],":CHECK-CONSISTENCY":[0],"as\nwhat":[0],"parsed.":[0],"inconsistent\nwith":[0],"Refactor":[0],"dependencies.":[1,0],"UPPERCASED":[0],"aren't":[0],"can't":[0],"referenced.":[0],"facil":[0],"Sphinx":[1,0],"does.":[0],"Separ":[0],"ChangeLog.":[0],"RSS":[1,0],"Atom":[0],"feed":[1,0],"changelog":[1,0],"items,":[0],"macro.":[1,0],"Make":[0],"compile-tim":[0],"Emacs,":[0],"TODO":[0],"5":[1],"0.17.4":[1],"(2024-05-15)":[1],"0.17.3":[1],"update.":[1],"0.17.2":[1],"0.17.1":[1],"introduced.":[1],"off":[1],"default,\n":[1],"too":[1],"math":[1],"unnecessari":[1],"Generic-funct":[1],"deprecated.":[1],"Pass":[1],":LANGUAGES":[1],":THEME":[1],"40ants-doc-full/plugins/highlightjs:highlightj":[1],"function\n":[1],"instead.":[1],"Backward":[1],"0.17.0":[1],"(2024-05-13)":[1],"added.":[1],"overrid":[1],"0.16.0":[1],"(2024-05-04)":[1],"backslash.":[1],"0.15.4":[1],"(2024-01-26)":[1],"Fix":[1],"given.":[1],"redirect":[1],"index.html":[1],"path.":[1],"0.15.3":[1],"(2024-01-24)":[1],"stack":[1],"exhaust":[1],"systems.":[1],"0.15.2":[1],"(2023-11-28)":[1],"unpack":[1],"archiv":[1],"pathnames.":[1],"now.":[1],"0.15.1":[1],"(2023-08-05)":[1],"Autodoc":[1],"autodoc":[1],"sort":[1],"alphabetically.":[1],"0.15.0":[1],"(2023-07-22)":[1],"40ants-doc:*symbols-with-ignored-missing-locations*":[1],"location.":[1],"autogener":[1],"methods.":[1],"methods\n":[1],"0.14.0":[1],"(2023-06-04)":[1],"subsystem.":[1],"0.13.0":[1],"40ants-doc/autodoc:defautodoc":[1],"(2023-04-22)":[1],"Script":[1],"fixed.":[1],"0.11.2":[1],"(2022-12-05)":[1],"40ants-doc/locatives/base:locative-typ":[1],"broken":[1],"refactoring.":[1],"function\nwa":[1],"transform":[1],"well":[1],"40ants-doc/locatives/base:locative-arg":[1],"0.11.1":[1],"(2022-11-26)":[1],"Larg":[1],"move":[1],"./full/":[1],"renam":[1],"40ants-doc-full/":[1],"0.11.0":[1],"(2022-11-16)":[1],"Default":[1],"rework":[1],"flex":[1],"\"bullets\".\nAlso,":[1],"0.10.0":[1],"(2022-11-09)":[1],"generic-function:":[1],"Comput":[1],"just-don":[1],"stamp":[1],"action":[1],"(ASDF/LISP-ACTION:COMPILE-OP\n":[1],"\"40ants-asdf-system/changelog\"),":[1],"\"40ants-asdf-system/changelog\"\n":[1],"\"file-type\")":[1],"wasn't":[1],"yet!":[1],"0.9.2":[1],"(2022-10-26)":[1],"40ants-doc/ignored-words.":[1],"Becaus":[1],"0.9.1":[1],"(2022-10-19)":[1],"libraries.\nTo":[1],"then\nment":[1],"40ANTS-CI::@CRITIC":[1],"0.9.0":[1],"(2022-02-21)":[1],"40ants-doc-full/commondoc/mapper:map-nod":[1],"generic-function\n":[1],"40ants-doc-full/commondoc/mapper:node-supports-children":[1],"Spinneret,":[1],"now\n":[1],"nodes.":[1],"0.8.0":[1],"(2022-02-14)":[1],"40ants/changelog:defchangelog":[1],"Automat":[1],"date":[1],"2021-12-31.":[1],"Now\n":[1],"alpha":[1],"0.7.0":[1],"(2021-12-31)":[1],"issue,":[1],"tri":[1],"useful,":[1],"multiple\n":[1],"40ants-doc/ignored-words:ignore-words-in-packag":[1],"suppress":[1],"0.6.0":[1],"(2021-12-05)":[1],"built.":[1],"Previosli":[1],"incorrectli":[1],"shown":[1],"COMMONDOC:SECTION":[1],"0.5.8":[1],"(2021-10-23)":[1],"0.5.7":[1],"(2021-10-21)":[1],"Blockquot":[1],"downcas":[1],"settings.":[1],"0.5.6":[1],"Warn":[1],"40ANTS-DOC/COMMONDOC/XREF:XREF>":[1],"0.5.3":[1],"(2021-09-08)":[1],"rewritten":[1],"actionable:":[1],"0.5.5":[1],"(2021-09-26)":[1],"Include":[1],"changelog.lisp":[1],"0.5.4":[1],"(2021-09-11)":[1],"40ANTS-DOC/COMMONDOC/XREF:XREF":[1],"text.":[1],"underlin":[1],"imag":[1],"":[1],"0.5.2":[1],"comparison":[1],"0.5.1":[1],"(2021-09-07)":[1],"accept":[1],"argument.\nTogeth":[1],"pages,":[1],"references.json":[1],"rendered,":[1],"can\nprovid":[1],"libraries'":[1],"automatic\ncross-referenc":[1],"0.5.0":[1],"(2021-09-06)":[1],"40ants-doc-full/builder:get-current-asdf-system":[1],"interesting\n":[1],"GitHub\"":[1],"my":[1],"changelog.":[1],"0.4.1":[1],"(2021-09-05)":[1],"*DOCUMENT-NORMALIZE-PACKAGES*":[1],"0.4.0":[1],"documentation\n":[1],"adjust":[1],"protocol":[1],"layout.\n":[1],"Three":[1],"box.\n":[1],"0.3.0":[1],"(2021-09-04)":[1],"links.\n":[1],"correct\n":[1],"\"Clean\"":[1],"section\n":[1],"exports.":[1],"40ants-doc/locatives:includ":[1],":HEADER":[1],":FOOTER":[1],"browser.":[1],"taken":[1],"builder.":[1],"Elisp":[1],"code\n":[1],"supports\n":[1],"generation.":[1],"versions.":[1],"*DOCUMENT-HTML-MAX-NAVIGATION-TABLE-OF-CONTENTS-LEVEL*":[1],"*DOCUMENT-MAX-TABLE-OF-CONTENTS-LEVEL*":[1],"removed.":[1],"Probabl":[1],"we'll":[1],"this\n":[1],"restrict":[1],"size.":[1],"Remov":[1],"LOCATE-AND-DOCUMENT":[1],"automatically,\n":[1],"used\n":[1],"COLLECT-REACHABLE-OBJECTS":[1],"LOCATE-AND-COLLECT-REACHABLE-OBJECTS":[1],"*DOCUMENT-LINK-SECTIONS*":[1],"*DOCUMENT-TEXT-NAVIGATION*":[1],"*DOCUMENT-FANCY-HTML-NAVIGATION*":[1],"*DOCUMENT-MIN-LINK-HASH-LENGTH*":[1],"COMMONDOC-MARKDOWN:*MIN-LINK-HASH-LENGTH*":[1],"*DOCUMENT-MARK-UP-SIGNATURES*":[1],"*DOCUMENT-DOWNCASE-UPPERCASE-CODE*":[1],".\n":[1],"internals,":[1],"::":[1],"40ants-doc:defsection-copi":[1],"0.2.0":[1],"(2021-09-01)":[1],"separated\n":[1],"minimum":[1],"unicod":[1],"characters\n":[1],"file-subseq":[1],"rewritten.":[1],"defsection\n":[1],"40ants-doc/loc":[1],"update-asdf-system-readm":[1],"Test":[1],"Rove":[1],"(asdf:test-system":[1],":40ants-doc)":[1],"MGL-PAX:DEFINE-PACKAGE":[1],"docstring.":[1],"Uppercas":[1],"charat":[1],"Improve":[1],"packages.":[1],"keywords.":[1],"(2021-05-01)":[1]},"titles":["40Ants Doc Manual","ChangeLog"],"titleterms":[]}) diff --git a/searchtools.js b/searchtools.js new file mode 100644 index 00000000..c0180d7f --- /dev/null +++ b/searchtools.js @@ -0,0 +1,532 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2021 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +if (!Scorer) { + /** + * Simple result scoring code. + */ + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [filename, title, anchor, descr, score] + // and returns the new score. + /* + score: function(result) { + return result[4]; + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: {0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5}, // used to be unimportantResults + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2 + }; +} + +if (!splitQuery) { + function splitQuery(query) { + return query.split(/\s+/); + } +} + +/** + * Search Module + */ +var Search = { + + _index : null, + _queued_query : null, + _pulse_status : -1, + + htmlToText : function(htmlString) { + var virtualDocument = document.implementation.createHTMLDocument('virtual'); + var htmlElement = $(htmlString, virtualDocument); + htmlElement.find('.headerlink').remove(); + docContent = htmlElement.find('[role=main]')[0]; + if(docContent === undefined) { + console.warn("Content block not found. Sphinx search tries to obtain it " + + "via '[role=main]'. Could you check your theme or template."); + return ""; + } + return docContent.textContent || docContent.innerText; + }, + + init : function() { + var params = $.getQueryParameters(); + if (params.q) { + var query = params.q[0]; + $('input[name="q"]')[0].value = query; + this.performSearch(query); + } + }, + + loadIndex : function(url) { + $.ajax({type: "GET", url: url, data: null, + dataType: "script", cache: true, + complete: function(jqxhr, textstatus) { + if (textstatus != "success") { + document.getElementById("searchindexloader").src = url; + } + }}); + }, + + setIndex : function(index) { + var q; + this._index = index; + if ((q = this._queued_query) !== null) { + this._queued_query = null; + Search.query(q); + } + }, + + hasIndex : function() { + return this._index !== null; + }, + + deferQuery : function(query) { + this._queued_query = query; + }, + + stopPulse : function() { + this._pulse_status = 0; + }, + + startPulse : function() { + if (this._pulse_status >= 0) + return; + function pulse() { + var i; + Search._pulse_status = (Search._pulse_status + 1) % 4; + var dotString = ''; + for (i = 0; i < Search._pulse_status; i++) + dotString += '.'; + Search.dots.text(dotString); + if (Search._pulse_status > -1) + window.setTimeout(pulse, 500); + } + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch : function(query) { + // create the required interface elements + this.out = $('#search-results'); + this.title = $('

' + _('Searching') + '

').appendTo(this.out); + this.dots = $('').appendTo(this.title); + this.status = $('

 

').appendTo(this.out); + this.output = $('