diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 0000000..e69de29 diff --git a/METADATA b/METADATA new file mode 100644 index 0000000..06280f7 --- /dev/null +++ b/METADATA @@ -0,0 +1,2 @@ +languages: bash, css, json, lisp, markdown, plaintext, xml, yaml +theme: a11y-dark diff --git a/changelog.xml b/changelog.xml new file mode 100644 index 0000000..03e1f4a --- /dev/null +++ b/changelog.xml @@ -0,0 +1,14 @@ + + + + 40ants-ci-docs ChangeLog + https://40ants.com/ci/ + xml-emitter + en-us + + 0.1.0 (2023-02-05) + <ul><li><p>Initial version.</p></li></ul> + Sun, 05 Feb 2023 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 0000000..e2ebafc --- /dev/null +++ b/changelog/index.html @@ -0,0 +1,72 @@ + + + + ChangeLog + + + + + + + + + + + + +
Fork me on GitHub + + +

ChangeLog

0.1.0 (2023-02-05)

+
+
+ + \ No newline at end of file diff --git a/doctools.js b/doctools.js new file mode 100644 index 0000000..8cbf1b1 --- /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 0000000..7820d7d --- /dev/null +++ b/highlight.min.css @@ -0,0 +1,7 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: a11y-dark + Author: @ericwbailey + Maintainer: @ericwbailey + + Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css +*/.hljs{background:#2b2b2b;color:#f8f8f2}.hljs-comment,.hljs-quote{color:#d4d0ab}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ffa07a}.hljs-built_in,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-type{color:#f5ab35}.hljs-attribute{color:gold}.hljs-addition,.hljs-bullet,.hljs-string,.hljs-symbol{color:#abe338}.hljs-section,.hljs-title{color:#00e0e0}.hljs-keyword,.hljs-selector-tag{color:#dcc6e0}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}@media screen and (-ms-high-contrast:active){.hljs-addition,.hljs-attribute,.hljs-built_in,.hljs-bullet,.hljs-comment,.hljs-link,.hljs-literal,.hljs-meta,.hljs-number,.hljs-params,.hljs-quote,.hljs-string,.hljs-symbol,.hljs-type{color:highlight}.hljs-keyword,.hljs-selector-tag{font-weight:700}} \ No newline at end of file diff --git a/highlight.min.js b/highlight.min.js new file mode 100644 index 0000000..d14eb0c --- /dev/null +++ b/highlight.min.js @@ -0,0 +1,466 @@ +/*! + Highlight.js v11.9.0 (git: b7ec4bfafc) + (c) 2006-2023 undefined 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.9.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.9.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"],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","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.9.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","p","q","quote","samp","section","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(),o=["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(),t=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),i=["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","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-right-color","border-right-style","border-right-width","border-spacing","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","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","isolation","kerning","justify-content","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","row-gap","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-style","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-position","top","transform","transform-box","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","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:":("+o.join("|")+")"},{begin:":(:)?("+t.join("|")+")"}]},l.CSS_VARIABLE,{ +className:"attribute",begin:"\\b("+i.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.9.0 */ +(()=>{var e=(()=>{"use strict";return e=>{const a=["true","false","null"],n={ +scope:"literal",beginKeywords:a.join(" ")};return{name:"JSON",keywords:{ +literal:a},contains:[{className:"attr",begin:/"(\\.|[^\\"\r\n])*"(?=\s*:)/, +relevance:1.01},{match:/[{}[\],:]/,className:"punctuation",relevance:0 +},e.QUOTE_STRING_MODE,n,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.9.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.9.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}]}]}}})() +;hljs.registerLanguage("markdown",e)})();/*! `plaintext` grammar compiled for Highlight.js 11.9.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.9.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.9.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/index.html b/index.html new file mode 100644 index 0000000..5b8019b --- /dev/null +++ b/index.html @@ -0,0 +1,599 @@ + + + + 40Ants-CI - Github Workflow Generator + + + + + + + + + + + + +
Fork me on GitHub + + +

40Ants-CI - Github Workflow Generator

This is a small utility, which can generate GitHub workflows for Common Lisp +projects.

It generates workflow for running tests and building docs. These workflows +use 40ants/run-tests and 40ants/build-docs +actions and SBLint to check code for compilation errors.

40ANTS-CI ASDF System Details

Reasons to Use

  • This system hides all entrails related to caching.

  • Includes a few ready to use job types.

  • Custom job types can be defined and distributed as separate ASDF systems.

  • You don't have to write YAML anymore!

Quickstart

This system allows you to define workflows in the lisp code. The best way is to make these +definitions a part of your ASDF system. This way 40ants-ci (1 2) will be able to +automatically understand for which system it builds a workflow.

Each workflow consists of jobs and each job is a number of steps.

There are three predefine types of jobs and you can create your own. Predefined jobs +allows to reuse steps in multiple CL libraries.

In next examples, I'll presume you are writing code in a file which is the part +of the package inferred ASDF system EXAMPLE/CI. A file should have the following header:

(defpackage #:example/ci
+  (:use #:cl)
+  (:import-from #:40ants-ci/workflow
+                #:defworkflow)
+  (:import-from #:40ants-ci/jobs/linter)
+  (:import-from #:40ants-ci/jobs/run-tests)
+  (:import-from #:40ants-ci/jobs/docs))

Job Types

Autotag

This job is automates git tag placement on the commit where you have changed the ChangeLog.md.

This can be a useful to automate package deployment and releases. You update the changelog, +a job pushes a new git tag and the next action triggers on this tag and build a release.

Or you if you publish your library at Quicklisp distribution, then you can change +it's source type to the latest-github-tag to provide more stable releases to your +users. This way you commits into master will be ignored until you change the changelog and +git tag will be pushed. Here is an example how to setup this kind of quicklisp project source.

(defworkflow release
+  :on-push-to "master"
+  :jobs ((40ants-ci/jobs/autotag:autotag)))
function
&key (filename \*default-filename\*) (regex \*default-regex\*) (tag-prefix \*default-tag-prefix\*) (token-pattern \*default-token-pattern\*) env

Creates a job which will run autotagger to create a new git tag for release.

This type of the job created a git tag when finds a new tag in specified file.

Linter

The simplest job type is linter. It loads a

(defworkflow linter
+  :on-pull-request t
+  :jobs ((40ants-ci/jobs/linter:linter)))

When you'll hit C-c C-c on this definition, +it will generate .github/workflows/linter.yml with following content:

{
+  "name": "LINTER",
+  "on": {
+    "pull_request": null
+  },
+  "jobs": {
+    "linter": {
+      "runs-on": "ubuntu-latest",
+      "env": {
+        "OS": "ubuntu-latest",
+        "QUICKLISP_DIST": "quicklisp",
+        "LISP": "sbcl-bin"
+      },
+      "steps": [
+        {
+          "name": "Checkout Code",
+          "uses": "actions/checkout@v4"
+        },
+        {
+          "name": "Setup Common Lisp Environment",
+          "uses": "40ants/setup-lisp@v4",
+          "with": {
+            "asdf-system": "example"
+          }
+        },
+        {
+          "name": "Install SBLint",
+          "run": "qlot exec ros install cxxxr/sblint",
+          "shell": "bash"
+        },
+        {
+          "name": "Run Linter",
+          "run": "qlot exec sblint example.asd",
+          "shell": "bash"
+        }
+      ]
+    }
+  }
+}

Here you can see, a few steps in the job:

  1. Checkout the code.

  2. Install Roswell & Qlot using 40ants/setup-lisp action.

  3. Install SBLint.

  4. Run linter for example.asd.

Another interesting thing is that this workflow automatically uses ubuntu-latest OS, +Quicklisp and sbcl-bin Lisp implementation. Later I'll show you how to redefine these settings.

Critic

This job is similar to linter, but instead of SBLint it runs +Lisp Critic.

Lisp Critic is a program which advices how to make you Common Lisp code more +idiomatic, readable and performant. Also, sometimes it might catch logical +errors in the code.

Here is how you can add this job type in your workflow:

(defworkflow ci
+  :on-pull-request t
+  :jobs ((40ants-ci/jobs/critic:critic)))

Also, you might combine this job together with others, for example, +with linter:

(defworkflow ci
+  :on-pull-request t
+  :jobs ((40ants-ci/jobs/linter:linter)
+         (40ants-ci/jobs/critic:critic)))

and they will be executed in parallel. See docs on 40ants-ci/jobs/critic:critic function +to learn about supported arguments.

Running Tests

Another interesting job type is 40ants-ci/jobs/run-tests:run-tests (1 2).

When using this job type, make sure, your system +runs tests on (ASDF:TEST-SYSTEM :system-name) call +and signals error if something went wrong.


+(defworkflow ci
+  :on-push-to "master"
+  :by-cron "0 10 * * 1"
+  :on-pull-request t
+  :jobs ((40ants-ci/jobs/run-tests:run-tests
+          :coverage t)))
+

Here I've added a few options to the workflow:

  • by-cron - sets a schedule.

  • on-push-to - defines a branch or branches to track.

It will generate .github/workflows/ci.yml with following content:

{
+  "name": "CI",
+  "on": {
+    "push": {
+      "branches": [
+        "master"
+      ]
+    },
+    "pull_request": null,
+    "schedule": [
+      {
+        "cron": "0 10 * * 1"
+      }
+    ]
+  },
+  "jobs": {
+
+    "run-tests": {
+      "runs-on": "ubuntu-latest",
+      "env": {
+        "OS": "ubuntu-latest",
+        "QUICKLISP_DIST": "quicklisp",
+        "LISP": "sbcl-bin"
+      },
+      "steps": [
+        {
+          "name": "Checkout Code",
+          "uses": "actions/checkout@v4"
+        },
+        {
+          "name": "Setup Common Lisp Environment",
+          "uses": "40ants/setup-lisp@v4",
+          "with": {
+            "asdf-system": "example"
+          }
+        },
+        {
+          "name": "Run Tests",
+          "uses": "40ants/run-tests@v2",
+          "with": {
+            "asdf-system": "example",
+            "coveralls-token": "${{ secrets.github_token }}"
+          }
+        }
+      ]
+    }
+  }
+}
+

The result is similar to the workflow generated for Linter, +but uses 40ants/setup-lisp action +at the final step.

Also, I've passed an option :coverage t to the job. Thus coverage +report will be uploaded to Coveralls.io automatically.

Defining a test Matrix

Lisp has many implementations and can be used on multiple platforms. Thus +it is a good idea to test our software on many combinations of OS and lisp +implementations. Workflow generator makes this very easy.

Here is an example of workflow definition with three dimentional matrix. +It not only tests a library under different lisps and OS, but also checks +if it works with the latest Quicklisp and Ultralisp distributions:

(defworkflow ci
+  :on-pull-request t
+  :jobs ((run-tests
+          :os ("ubuntu-latest"
+               "macos-latest")
+          :quicklisp ("quicklisp"
+                      "ultralisp")
+          :lisp ("sbcl-bin"
+                 "ccl-bin"
+                 "allegro"
+                 "clisp"
+                 "cmucl")
+          :exclude (;; Seems allegro is does not support 64bit OSX.
+                    ;; Unable to install it using Roswell:
+                    ;; alisp is not executable. Missing 32bit glibc?
+                    (:os "macos-latest" :lisp "allegro")))))
Multiple jobs

Besides a build matrix, you might specify a multiple jobs of the same type, +but with different parameters:

(defworkflow ci
+  :on-push-to "master"
+  :on-pull-request t
+  :jobs ((run-tests
+          :lisp "sbcl-bin")
+         (run-tests
+          :lisp "ccl-bin")
+         (run-tests
+          :lisp "allegro")))

This will generate a workflow with three jobs: "run-tests", "run-tests-2" and "run-tests-3".

Meaningful names might be specified as well:

(defworkflow ci
+  :on-push-to "master"
+  :on-pull-request t
+  :jobs ((run-tests
+          :name "test-on-sbcl"
+          :lisp "sbcl-bin")
+         (run-tests
+          :name "test-on-ccl"
+          :lisp "ccl-bin")
+         (run-tests
+          :name "test-on-allegro"
+          :lisp "allegro")))

Here is how these jobs will look like in the GitHub interface:

Building Docs

Third predefined job type is 40ants-ci/jobs/docs:build-docs (1 2). +It uses 40ants/build-docs +action and will work only if your ASDF system uses a documentation builder supported by +40ants/docs-builder.

To build docs on every push to master, just use this code:


+(defworkflow docs
+  :on-push-to "master"
+  :jobs ((40ants-ci/jobs/docs:build-docs)))
+

It will generate .github/workflows/docs.yml with following content:


+{
+  "name": "DOCS",
+  "on": {
+    "push": {
+      "branches": [
+        "master"
+      ]
+    }
+  },
+  "jobs": {
+    "build-docs": {
+      "runs-on": "ubuntu-latest",
+      "env": {
+        "OS": "ubuntu-latest",
+        "QUICKLISP_DIST": "quicklisp",
+        "LISP": "sbcl-bin"
+      },
+      "steps": [
+        {
+          "name": "Checkout Code",
+          "uses": "actions/checkout@v4"
+        },
+        {
+          "name": "Setup Common Lisp Environment",
+          "uses": "40ants/setup-lisp@v4",
+          "with": {
+            "asdf-system": "example",
+            "qlfile-template": ""
+          }
+        },
+        {
+          "name": "Build Docs",
+          "uses": "40ants/build-docs@v1",
+          "with": {
+            "asdf-system": "example"
+          }
+        }
+      ]
+    }
+  }
+}
+

Caching

To significantly speed up our tests, we can cache installed Roswell, +Qlot and Common Lisp fasl files.

To accomplish this task, you don't need to dig into GitHub's docs anymore! +Just add one line :cache t to your workflow definition:

(defworkflow docs
+  :on-push-to "master"
+  :cache t
+  :jobs ((40ants-ci/jobs/docs:build-docs)))

Here is the diff of the generated workflow file. It shows steps, added automatically:

modified   .github/workflows/docs.yml
+@@ -20,13 +20,40 @@
+           "name": "Checkout Code",
+           "uses": "actions/checkout@v4"
+         },
++        {
++          "name": "Grant All Perms to Make Cache Restoring Possible",
++          "run": "sudo mkdir -p /usr/local/etc/roswell\n                 sudo chown \"${USER}\" /usr/local/etc/roswell\n                 # Here the ros binary will be restored:\n                 sudo chown \"${USER}\" /usr/local/bin",
++          "shell": "bash"
++        },
++        {
++          "name": "Get Current Month",
++          "id": "current-month",
++          "run": "echo \"::set-output name=value::$(date -u \"+%Y-%m\")\"",
++          "shell": "bash"
++        },
++        {
++          "name": "Cache Roswell Setup",
++          "id": "cache",
++          "uses": "actions/cache@v3",
++          "with": {
++            "path": "qlfile\n                           qlfile.lock\n                           /usr/local/bin/ros\n                           ~/.cache/common-lisp/\n                           ~/.roswell\n                           /usr/local/etc/roswell\n                           .qlot",
++            "key": "${{ steps.current-month.outputs.value }}-${{ env.cache-name }}-ubuntu-latest-quicklisp-sbcl-bin-${{ hashFiles('qlfile.lock') }}"
++          }
++        },
++        {
++          "name": "Restore Path To Cached Files",
++          "run": "echo $HOME/.roswell/bin >> $GITHUB_PATH\n                 echo .qlot/bin >> $GITHUB_PATH",
++          "shell": "bash",
++          "if": "steps.cache.outputs.cache-hit == 'true'"
++        },
+         {
+           "name": "Setup Common Lisp Environment",
+           "uses": "40ants/setup-lisp@v4",
+           "with": {
+             "asdf-system": "40ants-ci",
+             "qlfile-template": ""
+-          }
++          },
++          "if": "steps.cache.outputs.cache-hit != 'true'"
+         },
+         {

Details

TODO: I have to write a few chapters with details on additional job's parameters +and a way how to create new job types.

But for now, I want to show a small example, how to define a workflow with a +job which takes care about lisp installation and then calls a custom step:

(defworkflow ci
+  :on-push-to "master"
+  :by-cron "0 10 * * 1"
+  :on-pull-request t
+  :cache t
+  :jobs ((40ants-ci/jobs/lisp-job:lisp-job :name "check-ros-config"
+                                           :lisp "ccl-bin"
+                                           :steps ((40ants-ci/steps/sh:sh "Show Roswell Config"
+                                                                          "ros config")))))

Here we are using the class 40ants-ci/jobs/lisp-job:lisp-job which is base for most classes in this ASDF system +and pass a custom 40ants-ci/steps/sh:sh (1 2) step to it. This step will be called after the repostory checkout and CCL-BIN lisp installation. +so, thus when this step will run ros config command, it will output something like that:

asdf.version=3.3.5.3
+ccl-bin.version=1.12.2
+setup.time=3918000017
+sbcl-bin.version=2.4.1
+default.lisp=ccl-bin
+
+Possible subcommands:
+set
+show

Pay attention to the NAME argument of 40ants-ci/jobs/lisp-job:lisp-job class. If you omit it, then default "lisp-job" name will be used.

API

40ANTS-CI

Functions

Generates GitHub workflow for given ASDF system.

This function searches workflow definitions in all packages +of the given ASDF system.

If PATH argument is not given, workflow files will be written +to .github/workflow/ relarive to the SYSTEM.

40ANTS-CI/GITHUB

Generics

Variables

When workflow is generated for ASDF system, this variable will contain a primary ASDF system.

40ANTS-CI/JOBS/AUTOTAG

Classes

AUTOTAG

This type of the job created a git tag when finds a new tag in specified file.

Readers

reader
(:filename = \*default-filename\*)

File where to search for version numbers.

reader
(:regex = \*default-regex\*)

Regexp used to extract version numbers.

reader
(:tag-prefix = \*default-tag-prefix\*)

Tag prefix.

reader
(:token-pattern = \*default-token-pattern\*)

Auth token pattern.

Functions

function
&key (filename \*default-filename\*) (regex \*default-regex\*) (tag-prefix \*default-tag-prefix\*) (token-pattern \*default-token-pattern\*) env

Creates a job which will run autotagger to create a new git tag for release.

40ANTS-CI/JOBS/CRITIC

Classes

CRITIC

Readers

Critic can validate more than one system, but for the base class we need provide only one.

A list strigns with names of critiques to ignore.

Functions

function
&key asdf-systems asdf-version ignore-critiques env

Creates a job which will run Lisp Critic for given ASDF systems.

If argument ASDF-SYSTEMS is NIL, it will use ASDF system +to which current lisp file is belong.

You may also provide ASDF-VERSION argument. It should be +a string. By default, the latest ASDF version will be used.

40ANTS-CI/JOBS/DOCS

Classes

BUILD-DOCS

Builds documentation and uploads it to GitHub using "40ants/build-docs" github action.

Readers

Functions

function
&key asdf-system asdf-version (error-on-warnings t) env

Creates a job of class build-docs.

40ANTS-CI/JOBS/JOB

Classes

JOB

Readers

A list of plists denoting matrix combinations to be excluded.

This slot holds steps given as a STEPS argument to a job constructor. Depending on a job class, it might add additional steps around these explicit steps.

An alist of environment variables and their values to be added on job level. Values are evaluated in runtime.

If this name was not given in constructor, then name will be lowercased name of the job class.

reader
(:OS = "ubuntu-latest")

A plist of permissions need for running the job.

These permissions will be bound to secrets.GITHUB_TOKEN variable. +Use default-initargs to override permissions in subclasses:

(:default-initargs
+ :permissions '(:content "write"))

Generics

Should return an alist with mapping from string to string where keys are scopes and values are permission names. Default method generates this alist from the plist of job's "permissions" slot.

40ANTS-CI/JOBS/LINTER

Classes

LINTER

Readers

Linter can validate more than one system, but for the base class we need provide only one.

Linter will check for missing or unused imports of package-inferred systems.

Functions

function
&key asdf-systems asdf-version check-imports env

Creates a job which will run SBLint for given ASDF systems.

If no ASD files given, it will use all ASD files from +the current ASDF system.

40ANTS-CI/JOBS/LISP-JOB

Classes

LISP-JOB

This job checkouts the sources, installs Roswell and Qlot. Also, it caches results between runs.

Readers

ASDF version to use when setting up Lisp environment. If NIL, then the latest will be used.

Qlot version to use when setting up Lisp environment. If NIL, then will be used version, pinned in setup-lisp github action.

reader
(:QUICKLISP = "quicklisp")

Roswell version to use when setting up Lisp environment. If NIL, then will be used version, pinned in setup-lisp github action.

40ANTS-CI/JOBS/RUN-TESTS

Classes

RUN-TESTS

This job test runs tests for a given ASDF system.

Readers

Functions

function
&rest rest &key coverage qlfile asdf-system asdf-version os quicklisp lisp exclude custom env

Creates a job step of class run-tests.

40ANTS-CI/STEPS/ACTION

Classes

ACTION

Readers

A plist to be passed as "with" dictionary to the action.

Functions

function
name uses &rest args &key id if env &allow-other-keys

40ANTS-CI/STEPS/SH

Classes

SH

Readers

reader
(:shell = \*default-shell\*)

Functions

function
name command &key id if (shell \*default-shell\*) env

Macros

Returns a string with a bash script where some parts are grouped.

In this example we have 3 sections:

(sections
+      ("Help Argument"
+       "qlot exec cl-info --help")
+      ("Version Argument"
+       "qlot exec cl-info --version")
+      ("Lisp Systems Info"
+       "qlot exec cl-info"
+       "qlot exec cl-info cl-info defmain"))

It will be compiled into:

echo ::group::Help Argument
+qlot exec cl-info --help
+echo ::endgroup::
+echo ::group::Version Argument
+qlot exec cl-info --version
+echo ::endgroup::
+echo ::group::Lisp Systems Info
+qlot exec cl-info
+qlot exec cl-info cl-info defmain
+echo ::endgroup::

40ANTS-CI/STEPS/STEP

Classes

STEP

Readers

An alist of environment variables.

40ANTS-CI/UTILS

Generics

Returns a list of packages created by ASDF system.

Default implementation returns a package having the same name as a system +and all packages matched to package-inferred subsystems:

CL-USER> (docs-builder/utils:system-packages :docs-builder)
+(#<PACKAGE "DOCS-BUILDER">
+ #<PACKAGE "DOCS-BUILDER/UTILS">
+ #<PACKAGE "DOCS-BUILDER/GUESSER">
+ #<PACKAGE "DOCS-BUILDER/BUILDERS/GENEVA/GUESSER">
+ #<PACKAGE "DOCS-BUILDER/BUILDER">
+ #<PACKAGE "DOCS-BUILDER/BUILDERS/MGL-PAX/GUESSER">
+ #<PACKAGE "DOCS-BUILDER/DOCS">
+ #<PACKAGE "DOCS-BUILDER/BUILDERS/MGL-PAX/BUILDER">)

Functions

Test wheather LIST argument is a properly formed alist.

In this library, alist has always a string as a key. +Because we need them to have this form to serialize +to JSON propertly.

(alistp '(("cron" . "0 10 * * 1"))) -> T +(alistp '((("cron" . "0 10 * * 1")))) -> NIL

Removes common leading whitespace from each string.

A few examples:

(dedent "Hello
+          World
+          and all Lispers!")
+
+"Hello
+World
+and all Lispers!"
(dedent "
+    Hello
+    World
+    and all Lispers!")
+
+"Hello
+World
+and all Lispers!"
(dedent "This is a code:
+
+              (symbol-name :hello-world)
+
+          it will output HELLO-WORLD.")
+
+"This is a code:
+
+    (symbol-name :hello-world)
+
+it will output HELLO-WORLD."
function
plist &key (string-keys t) (lowercase t)

Make an alist from a plist PLIST.

By default, transforms keys to lowercased strings

Test wheather LIST is a properly formed plist.

Test wheather LIST contains exactly 1 element.

40ANTS-CI/VARS

Variables

When workflow is generated for ASDF system, this variable will contain a primary ASDF system.

Workflow will set this variable when preparing the data or YAML generation.

+
+
+ + \ No newline at end of file diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..b061403 --- /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 0000000..0710972 --- /dev/null +++ b/references.json @@ -0,0 +1 @@ +[{"URL":"https://40ants.com/ci/README.md#x-2840ANTS-CI-DOCS-2FINDEX-3A-40README-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX:@README","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/changelog/#x-2840ANTS-LOGGING-DOCS-2FCHANGELOG-3A-3A-7C0-2E1-2E0-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-LOGGING-DOCS/CHANGELOG::|0.1.0|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/changelog/#x-2840ANTS-LOGGING-DOCS-2FCHANGELOG-3A-40CHANGELOG-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-LOGGING-DOCS/CHANGELOG:@CHANGELOG","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FVARS-3A-2AUSE-CACHE-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-CI/VARS:*USE-CACHE*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FVARS-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/VARS?Variables-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2814-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FVARS-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/VARS","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FVARS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/VARS?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3ATO-JSON-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:TO-JSON","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3ASINGLE-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:SINGLE","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3APLISTP-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:PLISTP","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3APLIST-TO-ALIST-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:PLIST-TO-ALIST","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3AMAKE-GITHUB-WORKFLOWS-PATH-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:MAKE-GITHUB-WORKFLOWS-PATH","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3AENSURE-PRIMARY-SYSTEM-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:ENSURE-PRIMARY-SYSTEM","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3AENSURE-LIST-OF-PLISTS-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:ENSURE-LIST-OF-PLISTS","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3ADEDENT-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:DEDENT","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3ACURRENT-SYSTEM-NAME-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:CURRENT-SYSTEM-NAME","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3AALISTP-20FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:ALISTP","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FUTILS-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/UTILS?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FUTILS-3ASYSTEM-PACKAGES-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/UTILS:SYSTEM-PACKAGES","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FUTILS-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/UTILS?Generics-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2815-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FUTILS-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/UTILS","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FUTILS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/UTILS?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-NAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29","OBJECT":"40ANTS-CI/STEPS/STEP:STEP-NAME","LOCATIVE":["READER","STEP"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-IF-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29","OBJECT":"40ANTS-CI/STEPS/STEP:STEP-IF","LOCATIVE":["READER","STEP"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-ID-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29","OBJECT":"40ANTS-CI/STEPS/STEP:STEP-ID","LOCATIVE":["READER","STEP"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSTEP-3AENV-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29","OBJECT":"40ANTS-CI/STEPS/STEP:ENV","LOCATIVE":["READER","STEP"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-20CLASS-29","OBJECT":"40ANTS-CI/STEPS/STEP:STEP","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FSTEPS-2FSTEP-24STEP-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/STEPS/STEP$STEP?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FSTEPS-2FSTEP-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/STEPS/STEP?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FSTEPS-2FSTEP-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/STEPS/STEP","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FSTEPS-2FSTEP-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/STEPS/STEP?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSH-3ASECTIONS-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29","OBJECT":"40ANTS-CI/STEPS/SH:SECTIONS","LOCATIVE":["MACRO"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FSTEPS-2FSH-3FMacros-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/STEPS/SH?Macros-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSH-3ASH-20FUNCTION-29","OBJECT":"40ANTS-CI/STEPS/SH:SH","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FSTEPS-2FSH-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/STEPS/SH?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSH-3ASHELL-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSH-3ASH-29-29","OBJECT":"40ANTS-CI/STEPS/SH:SHELL","LOCATIVE":["READER","SH"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSH-3ACOMMAND-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSH-3ASH-29-29","OBJECT":"40ANTS-CI/STEPS/SH:COMMAND","LOCATIVE":["READER","SH"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FSH-3ASH-20CLASS-29","OBJECT":"40ANTS-CI/STEPS/SH:SH","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FSTEPS-2FSH-24SH-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/STEPS/SH$SH?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FSTEPS-2FSH-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/STEPS/SH?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FSTEPS-2FSH-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/STEPS/SH","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FSTEPS-2FSH-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/STEPS/SH?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FACTION-3AACTION-20FUNCTION-29","OBJECT":"40ANTS-CI/STEPS/ACTION:ACTION","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FSTEPS-2FACTION-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/STEPS/ACTION?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FACTION-3AUSES-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FACTION-3AACTION-29-29","OBJECT":"40ANTS-CI/STEPS/ACTION:USES","LOCATIVE":["READER","ACTION"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FACTION-3AACTION-ARGS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FACTION-3AACTION-29-29","OBJECT":"40ANTS-CI/STEPS/ACTION:ACTION-ARGS","LOCATIVE":["READER","ACTION"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FSTEPS-2FACTION-3AACTION-20CLASS-29","OBJECT":"40ANTS-CI/STEPS/ACTION:ACTION","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FSTEPS-2FACTION-24ACTION-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/STEPS/ACTION$ACTION?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FSTEPS-2FACTION-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/STEPS/ACTION?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2822-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FSTEPS-2FACTION-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/STEPS/ACTION","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FSTEPS-2FACTION-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/STEPS/ACTION?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-20FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/RUN-TESTS:RUN-TESTS","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FRUN-TESTS-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/RUN-TESTS?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ACUSTOM-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-29-29","OBJECT":"40ANTS-CI/JOBS/RUN-TESTS:CUSTOM","LOCATIVE":["READER","RUN-TESTS"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ACOVERAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-29-29","OBJECT":"40ANTS-CI/JOBS/RUN-TESTS:COVERAGE","LOCATIVE":["READER","RUN-TESTS"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/RUN-TESTS:RUN-TESTS","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FRUN-TESTS-24RUN-TESTS-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/RUN-TESTS$RUN-TESTS?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FRUN-TESTS-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/RUN-TESTS?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2824-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FRUN-TESTS-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/RUN-TESTS","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FRUN-TESTS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/RUN-TESTS?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AROSWELL-VERSION-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:ROSWELL-VERSION","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AQUICKLISP-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:QUICKLISP","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AQLOT-VERSION-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:QLOT-VERSION","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AQLFILE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:QLFILE","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:LISP","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AASDF-VERSION-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:ASDF-VERSION","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AASDF-SYSTEM-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:ASDF-SYSTEM","LOCATIVE":["READER","LISP-JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB:LISP-JOB","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FLISP-JOB-24LISP-JOB-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/LISP-JOB$LISP-JOB?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FLISP-JOB-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/LISP-JOB?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2823-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FLISP-JOB-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/LISP-JOB","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FLISP-JOB-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/LISP-JOB?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLINTER-3ALINTER-20FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/LINTER:LINTER","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FLINTER-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/LINTER?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLINTER-3ACHECK-IMPORTS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLINTER-3ALINTER-29-29","OBJECT":"40ANTS-CI/JOBS/LINTER:CHECK-IMPORTS","LOCATIVE":["READER","LINTER"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLINTER-3AASDF-SYSTEMS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLINTER-3ALINTER-29-29","OBJECT":"40ANTS-CI/JOBS/LINTER:ASDF-SYSTEMS","LOCATIVE":["READER","LINTER"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FLINTER-24LINTER-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/LINTER$LINTER?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FLINTER-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/LINTER?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2821-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FLINTER-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/LINTER","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FLINTER-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/LINTER?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AUSE-MATRIX-P-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/JOB:USE-MATRIX-P","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3ASTEPS-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/JOB:STEPS","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AMAKE-PERMISSIONS-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/JOB:MAKE-PERMISSIONS","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AMAKE-MATRIX-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/JOB:MAKE-MATRIX","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AMAKE-ENV-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/JOB:MAKE-ENV","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FJOB-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/JOB?Generics-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3APERMISSIONS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29","OBJECT":"40ANTS-CI/JOBS/JOB:PERMISSIONS","LOCATIVE":["READER","JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AOS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29","OBJECT":"40ANTS-CI/JOBS/JOB:OS","LOCATIVE":["READER","JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3ANAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29","OBJECT":"40ANTS-CI/JOBS/JOB:NAME","LOCATIVE":["READER","JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AJOB-ENV-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29","OBJECT":"40ANTS-CI/JOBS/JOB:JOB-ENV","LOCATIVE":["READER","JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AEXPLICIT-STEPS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29","OBJECT":"40ANTS-CI/JOBS/JOB:EXPLICIT-STEPS","LOCATIVE":["READER","JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AEXCLUDE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29","OBJECT":"40ANTS-CI/JOBS/JOB:EXCLUDE","LOCATIVE":["READER","JOB"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FJOB-3AJOB-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/JOB:JOB","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FJOB-24JOB-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/JOB$JOB?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FJOB-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/JOB?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FJOB-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/JOB","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FJOB-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/JOB?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FDOCS-3ABUILD-DOCS-20FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/DOCS:BUILD-DOCS","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FDOCS-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/DOCS?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FDOCS-3AERROR-ON-WARNINGS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FDOCS-3ABUILD-DOCS-29-29","OBJECT":"40ANTS-CI/JOBS/DOCS:ERROR-ON-WARNINGS","LOCATIVE":["READER","BUILD-DOCS"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FDOCS-3ABUILD-DOCS-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/DOCS:BUILD-DOCS","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FDOCS-24BUILD-DOCS-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/DOCS$BUILD-DOCS?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FDOCS-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/DOCS?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2819-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FDOCS-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/DOCS","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FDOCS-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/DOCS?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-20FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/CRITIC:CRITIC","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FCRITIC-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/CRITIC?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FCRITIC-3AIGNORE-CRITIQUES-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-29-29","OBJECT":"40ANTS-CI/JOBS/CRITIC:IGNORE-CRITIQUES","LOCATIVE":["READER","CRITIC"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FCRITIC-3AASDF-SYSTEMS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-29-29","OBJECT":"40ANTS-CI/JOBS/CRITIC:ASDF-SYSTEMS","LOCATIVE":["READER","CRITIC"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/CRITIC:CRITIC","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FCRITIC-24CRITIC-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/CRITIC$CRITIC?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FCRITIC-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/CRITIC?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2821-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FCRITIC-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/CRITIC","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FCRITIC-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/CRITIC?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FAUTOTAG-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/AUTOTAG?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3ATOKEN-PATTERN-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG:TOKEN-PATTERN","LOCATIVE":["READER","AUTOTAG"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3ATAG-PREFIX-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG:TAG-PREFIX","LOCATIVE":["READER","AUTOTAG"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AREGEX-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG:REGEX","LOCATIVE":["READER","AUTOTAG"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AFILENAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG:FILENAME","LOCATIVE":["READER","AUTOTAG"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FAUTOTAG-24AUTOTAG-3FCLASS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/AUTOTAG$AUTOTAG?CLASS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FJOBS-2FAUTOTAG-3FClasses-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/JOBS/AUTOTAG?Classes-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2822-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FAUTOTAG-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FJOBS-2FAUTOTAG-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/JOBS/AUTOTAG?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FVARS-3A-2ACURRENT-SYSTEM-2A-20-28VARIABLE-29-29","OBJECT":"40ANTS-CI/VARS:*CURRENT-SYSTEM*","LOCATIVE":["VARIABLE"]},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FGITHUB-3FVariables-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/GITHUB?Variables-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FGITHUB-3APREPARE-DATA-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/GITHUB:PREPARE-DATA","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FGITHUB-3AGENERATE-20GENERIC-FUNCTION-29","OBJECT":"40ANTS-CI/GITHUB:GENERATE","LOCATIVE":"GENERIC-FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-2FGITHUB-3FGenerics-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI/GITHUB?Generics-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-2816-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FGITHUB-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI/GITHUB","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-2FGITHUB-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI/GITHUB?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-3AGENERATE-20FUNCTION-29","OBJECT":"40ANTS-CI:GENERATE","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-7C-4040ANTS-CI-3FFunctions-SECTION-7C-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::|@40ANTS-CI?Functions-SECTION|","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-289-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-22-29-20PACKAGE-29","OBJECT":"40ANTS-CI","LOCATIVE":"PACKAGE"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-4040ANTS-CI-3FPACKAGE-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@40ANTS-CI?PACKAGE","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40API-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@API","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40DETAILS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@DETAILS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40CACHING-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@CACHING","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40BUILD-DOCS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@BUILD-DOCS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40MULTIPLE-JOBS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@MULTIPLE-JOBS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40MATRIX-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@MATRIX","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40RUN-TESTS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@RUN-TESTS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40CRITIC-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@CRITIC","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FLINTER-3ALINTER-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/LINTER:LINTER","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40LINTER-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@LINTER","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-20CLASS-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG:AUTOTAG","LOCATIVE":"CLASS"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-20FUNCTION-29","OBJECT":"40ANTS-CI/JOBS/AUTOTAG:AUTOTAG","LOCATIVE":"FUNCTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40AUTOTAG-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@AUTOTAG","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40JOB-TYPES-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@JOB-TYPES","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40QUICKSTART-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@QUICKSTART","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-3A-40REASONS-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX::@REASONS","LOCATIVE":"SECTION"},{"URL":"https://40ants.com/ci/#x-28-23A-28-289-29-20BASE-CHAR-20-2E-20-2240ants-ci-22-29-20ASDF-2FSYSTEM-3ASYSTEM-29","OBJECT":"40ants-ci","LOCATIVE":"SYSTEM"},{"URL":"https://40ants.com/ci/#x-2840ANTS-CI-DOCS-2FINDEX-3A-40INDEX-2040ANTS-DOC-2FLOCATIVES-3ASECTION-29","OBJECT":"40ANTS-CI-DOCS/INDEX:@INDEX","LOCATIVE":"SECTION"}] \ No newline at end of file diff --git a/search/index.html b/search/index.html new file mode 100644 index 0000000..1acbb73 --- /dev/null +++ b/search/index.html @@ -0,0 +1,87 @@ + + + + Search Page + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 0000000..872067e --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames":["../index","../changelog"],"filenames":["../","../changelog/"],"objects":{"40ANTS-CI/JOBS/AUTOTAG":{"AUTOTAG":[0,6,2,"x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-20FUNCTION-29"],"FILENAME":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AFILENAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29"],"REGEX":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3AREGEX-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29"],"TAG-PREFIX":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3ATAG-PREFIX-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29"],"TOKEN-PATTERN":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FAUTOTAG-3ATOKEN-PATTERN-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FAUTOTAG-3AAUTOTAG-29-29"]},"40ANTS-CI/JOBS/LINTER":{"LINTER":[0,6,2,"x-2840ANTS-CI-2FJOBS-2FLINTER-3ALINTER-20FUNCTION-29"],"ASDF-SYSTEMS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLINTER-3AASDF-SYSTEMS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLINTER-3ALINTER-29-29"],"CHECK-IMPORTS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLINTER-3ACHECK-IMPORTS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLINTER-3ALINTER-29-29"]},"":{"40ANTS-CI":[0,14,2,"x-28-23A-28-289-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-22-29-20PACKAGE-29"],"40ANTS-CI/GITHUB":[0,14,2,"x-28-23A-28-2816-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FGITHUB-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/AUTOTAG":[0,14,2,"x-28-23A-28-2822-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FAUTOTAG-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/CRITIC":[0,14,2,"x-28-23A-28-2821-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FCRITIC-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/DOCS":[0,14,2,"x-28-23A-28-2819-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FDOCS-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/JOB":[0,14,2,"x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FJOB-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/LINTER":[0,14,2,"x-28-23A-28-2821-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FLINTER-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/LISP-JOB":[0,14,2,"x-28-23A-28-2823-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FLISP-JOB-22-29-20PACKAGE-29"],"40ANTS-CI/JOBS/RUN-TESTS":[0,14,2,"x-28-23A-28-2824-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FJOBS-2FRUN-TESTS-22-29-20PACKAGE-29"],"40ANTS-CI/STEPS/ACTION":[0,14,2,"x-28-23A-28-2822-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FSTEPS-2FACTION-22-29-20PACKAGE-29"],"40ANTS-CI/STEPS/SH":[0,14,2,"x-28-23A-28-2818-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FSTEPS-2FSH-22-29-20PACKAGE-29"],"40ANTS-CI/STEPS/STEP":[0,14,2,"x-28-23A-28-2820-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FSTEPS-2FSTEP-22-29-20PACKAGE-29"],"40ANTS-CI/UTILS":[0,14,2,"x-28-23A-28-2815-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FUTILS-22-29-20PACKAGE-29"],"40ANTS-CI/VARS":[0,14,2,"x-28-23A-28-2814-29-20BASE-CHAR-20-2E-20-2240ANTS-CI-2FVARS-22-29-20PACKAGE-29"]},"40ANTS-CI":{"GENERATE":[0,6,2,"x-2840ANTS-CI-3AGENERATE-20FUNCTION-29"]},"40ANTS-CI/GITHUB":{"GENERATE":[0,7,2,"x-2840ANTS-CI-2FGITHUB-3AGENERATE-20GENERIC-FUNCTION-29"],"PREPARE-DATA":[0,7,2,"x-2840ANTS-CI-2FGITHUB-3APREPARE-DATA-20GENERIC-FUNCTION-29"]},"40ANTS-CI/VARS":{"*CURRENT-SYSTEM*":[0,22,2,"x-2840ANTS-CI-2FVARS-3A-2ACURRENT-SYSTEM-2A-20-28VARIABLE-29-29"],"*USE-CACHE*":[0,22,2,"x-2840ANTS-CI-2FVARS-3A-2AUSE-CACHE-2A-20-28VARIABLE-29-29"]},"40ANTS-CI/JOBS/CRITIC":{"CRITIC":[0,6,2,"x-2840ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-20FUNCTION-29"],"ASDF-SYSTEMS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FCRITIC-3AASDF-SYSTEMS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-29-29"],"IGNORE-CRITIQUES":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FCRITIC-3AIGNORE-CRITIQUES-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FCRITIC-3ACRITIC-29-29"]},"40ANTS-CI/JOBS/DOCS":{"BUILD-DOCS":[0,6,2,"x-2840ANTS-CI-2FJOBS-2FDOCS-3ABUILD-DOCS-20FUNCTION-29"],"ERROR-ON-WARNINGS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FDOCS-3AERROR-ON-WARNINGS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FDOCS-3ABUILD-DOCS-29-29"]},"40ANTS-CI/JOBS/JOB":{"JOB":[0,3,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AJOB-20CLASS-29"],"EXCLUDE":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AEXCLUDE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29"],"EXPLICIT-STEPS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AEXPLICIT-STEPS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29"],"JOB-ENV":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AJOB-ENV-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29"],"NAME":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3ANAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29"],"OS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AOS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29"],"PERMISSIONS":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3APERMISSIONS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FJOB-3AJOB-29-29"],"MAKE-ENV":[0,7,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AMAKE-ENV-20GENERIC-FUNCTION-29"],"MAKE-MATRIX":[0,7,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AMAKE-MATRIX-20GENERIC-FUNCTION-29"],"MAKE-PERMISSIONS":[0,7,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AMAKE-PERMISSIONS-20GENERIC-FUNCTION-29"],"STEPS":[0,7,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3ASTEPS-20GENERIC-FUNCTION-29"],"USE-MATRIX-P":[0,7,2,"x-2840ANTS-CI-2FJOBS-2FJOB-3AUSE-MATRIX-P-20GENERIC-FUNCTION-29"]},"40ANTS-CI/JOBS/LISP-JOB":{"LISP-JOB":[0,3,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-20CLASS-29"],"ASDF-SYSTEM":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AASDF-SYSTEM-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"],"ASDF-VERSION":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AASDF-VERSION-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"],"LISP":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"],"QLFILE":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AQLFILE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"],"QLOT-VERSION":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AQLOT-VERSION-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"],"QUICKLISP":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AQUICKLISP-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"],"ROSWELL-VERSION":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FLISP-JOB-3AROSWELL-VERSION-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FLISP-JOB-3ALISP-JOB-29-29"]},"40ANTS-CI/JOBS/RUN-TESTS":{"RUN-TESTS":[0,6,2,"x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-20FUNCTION-29"],"COVERAGE":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ACOVERAGE-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-29-29"],"CUSTOM":[0,18,2,"x-2840ANTS-CI-2FJOBS-2FRUN-TESTS-3ACUSTOM-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FJOBS-2FRUN-TESTS-3ARUN-TESTS-29-29"]},"40ANTS-CI/STEPS/ACTION":{"ACTION":[0,6,2,"x-2840ANTS-CI-2FSTEPS-2FACTION-3AACTION-20FUNCTION-29"],"ACTION-ARGS":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FACTION-3AACTION-ARGS-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FACTION-3AACTION-29-29"],"USES":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FACTION-3AUSES-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FACTION-3AACTION-29-29"]},"40ANTS-CI/STEPS/SH":{"SH":[0,6,2,"x-2840ANTS-CI-2FSTEPS-2FSH-3ASH-20FUNCTION-29"],"COMMAND":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FSH-3ACOMMAND-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSH-3ASH-29-29"],"SHELL":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FSH-3ASHELL-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSH-3ASH-29-29"],"SECTIONS":[0,12,2,"x-2840ANTS-CI-2FSTEPS-2FSH-3ASECTIONS-20-2840ANTS-DOC-2FLOCATIVES-3AMACRO-29-29"]},"40ANTS-CI/STEPS/STEP":{"STEP":[0,3,2,"x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-20CLASS-29"],"ENV":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FSTEP-3AENV-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29"],"STEP-ID":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-ID-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29"],"STEP-IF":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-IF-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29"],"STEP-NAME":[0,18,2,"x-2840ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-NAME-20-2840ANTS-DOC-2FLOCATIVES-3AREADER-2040ANTS-CI-2FSTEPS-2FSTEP-3ASTEP-29-29"]},"40ANTS-CI/UTILS":{"SYSTEM-PACKAGES":[0,7,2,"x-2840ANTS-CI-2FUTILS-3ASYSTEM-PACKAGES-20GENERIC-FUNCTION-29"],"ALISTP":[0,6,2,"x-2840ANTS-CI-2FUTILS-3AALISTP-20FUNCTION-29"],"CURRENT-SYSTEM-NAME":[0,6,2,"x-2840ANTS-CI-2FUTILS-3ACURRENT-SYSTEM-NAME-20FUNCTION-29"],"DEDENT":[0,6,2,"x-2840ANTS-CI-2FUTILS-3ADEDENT-20FUNCTION-29"],"ENSURE-LIST-OF-PLISTS":[0,6,2,"x-2840ANTS-CI-2FUTILS-3AENSURE-LIST-OF-PLISTS-20FUNCTION-29"],"ENSURE-PRIMARY-SYSTEM":[0,6,2,"x-2840ANTS-CI-2FUTILS-3AENSURE-PRIMARY-SYSTEM-20FUNCTION-29"],"MAKE-GITHUB-WORKFLOWS-PATH":[0,6,2,"x-2840ANTS-CI-2FUTILS-3AMAKE-GITHUB-WORKFLOWS-PATH-20FUNCTION-29"],"PLIST-TO-ALIST":[0,6,2,"x-2840ANTS-CI-2FUTILS-3APLIST-TO-ALIST-20FUNCTION-29"],"PLISTP":[0,6,2,"x-2840ANTS-CI-2FUTILS-3APLISTP-20FUNCTION-29"],"SINGLE":[0,6,2,"x-2840ANTS-CI-2FUTILS-3ASINGLE-20FUNCTION-29"],"TO-JSON":[0,6,2,"x-2840ANTS-CI-2FUTILS-3ATO-JSON-20FUNCTION-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":[0],"is":[0],"a":[0],"small":[0],"utility,":[0],"which":[0],"can":[0],"gener":[0],"GitHub":[0],"workflow":[0],"for":[0],"Common":[0],"Lisp\nprojects.":[0],"It":[0],"run":[0],"test":[0],"and":[0],"build":[0],"docs.":[0],"These":[0],"workflows\nus":[0],"40ants/run-test":[0],"40ants/build-doc":[0],"\naction":[0],"SBLint":[0],"to":[0],"check":[0],"code":[0],"compil":[0],"errors.":[0],"Description:":[0],"A":[0],"tool":[0],"simplifi":[0],"continu":[0],"deploy":[0],"Lisp":[0],"projects.":[0],"Licence:":[0],"BSD":[0],"Author:":[0],"Alexand":[0],"Artemenko":[0],"Homepage:":[0],"https://40ants.com/ci/":[0],"Sourc":[0],"control:":[0],"GIT":[0],"Depend":[0],"on:":[0],"alexandria":[0],",":[0],"serapeum":[0],"str":[0],"yason":[0],"40ANTS-CI":[0],"ASDF":[0],"System":[0],"Detail":[0],"system":[0],"hide":[0],"all":[0],"entrail":[0],"relat":[0],"caching.":[0],"Include":[0],"few":[0],"readi":[0],"us":[0],"job":[0],"types.":[0],"Custom":[0],"type":[0],"be":[0],"defin":[0],"distribut":[0],"as":[0],"separ":[0],"systems.":[0],"You":[0],"don't":[0],"have":[0],"write":[0],"YAML":[0],"anymore!":[0],"Reason":[0],"Use":[0],"allow":[0],"you":[0],"in":[0],"the":[0],"lisp":[0],"code.":[0],"The":[0],"best":[0],"wai":[0],"make":[0],"these\ndefinit":[0],"part":[0],"of":[0],"your":[0],"system.":[0],"40ants-ci":[0],"(":[0],"1":[0],"2":[0],")":[0],"will":[0],"abl":[0],"to\nautomat":[0],"understand":[0],"it":[0],"workflow.":[0],"Each":[0],"consist":[0],"each":[0],"number":[0],"steps.":[0],"There":[0],"ar":[0],"three":[0],"predefin":[0],"creat":[0],"own.":[0],"Predefin":[0],"jobs\nallow":[0],"reus":[0],"step":[0],"multipl":[0],"CL":[0],"libraries.":[0],"In":[0],"next":[0],"examples,":[0],"I'll":[0],"presum":[0],"file":[0],"part\nof":[0],"packag":[0],"infer":[0],"EXAMPLE/CI":[0],".":[0],"should":[0],"follow":[0],"header:":[0],"(defpackag":[0],"#:example/ci\n":[0],"(:use":[0],"#:cl)\n":[0],"(:import-from":[0],"#:40ants-ci/workflow\n":[0],"#:defworkflow)\n":[0],"#:40ants-ci/jobs/linter)\n":[0],"#:40ants-ci/jobs/run-tests)\n":[0],"#:40ants-ci/jobs/docs))":[0],"autom":[0],"git":[0],"tag":[0],"placement":[0],"on":[0],"commit":[0],"where":[0],"chang":[0],"ChangeLog.md.":[0],"releases.":[0],"updat":[0],"changelog,\na":[0],"push":[0],"new":[0],"action":[0],"trigger":[0],"thi":[0],"release.":[0],"Or":[0],"if":[0],"publish":[0],"librari":[0],"at":[0],"Quicklisp":[0],"distribution,":[0],"then":[0],"change\nit'":[0],"sourc":[0],"latest-github-tag":[0],"provid":[0],"more":[0],"stabl":[0],"releas":[0],"your\nusers.":[0],"into":[0],"master":[0],"ignor":[0],"until":[0],"changelog":[0],"and\ngit":[0],"pushed.":[0],"Here":[0],"an":[0],"exampl":[0],"how":[0],"setup":[0],"kind":[0],"quicklisp":[0],"project":[0],"source.":[0],"(defworkflow":[0],"release\n":[0],":on-push-to":[0],"\"master\"\n":[0],":job":[0],"((40ants-ci/jobs/autotag:autotag)))":[0],"Creat":[0],"autotagg":[0],"when":[0],"find":[0],"specifi":[0],"file.":[0],"Autotag":[0],"simplest":[0],"linter.":[0],"load":[0],"linter\n":[0],":on-pull-request":[0],"t\n":[0],"((40ants-ci/jobs/linter:linter)))":[0],"When":[0],"you'll":[0],"hit":[0],"C-c":[0],"definition,\nit":[0],".github/workflows/linter.yml":[0],"with":[0],"content:":[0],"{\n":[0],"\"name\":":[0],"\"LINTER\",\n":[0],"\"on\":":[0],"\"pull_request\":":[0],"null\n":[0],"},\n":[0],"\"jobs\":":[0],"\"linter\":":[0],"\"runs-on\":":[0],"\"ubuntu-latest\",\n":[0],"\"env\":":[0],"\"OS\":":[0],"\"QUICKLISP_DIST\":":[0],"\"quicklisp\",\n":[0],"\"LISP\":":[0],"\"sbcl-bin\"\n":[0],"\"steps\":":[0],"[\n":[0],"\"Checkout":[0],"Code\",\n":[0],"\"uses\":":[0],"\"actions/checkout@v4\"\n":[0],"\"Setup":[0],"Environment\",\n":[0],"\"40ants/setup-lisp@v4\",\n":[0],"\"with\":":[0],"\"asdf-system\":":[0],"\"example\"\n":[0],"}\n":[0],"\"Install":[0],"SBLint\",\n":[0],"\"run\":":[0],"\"qlot":[0],"exec":[0],"ro":[0],"instal":[0],"cxxxr/sblint\",\n":[0],"\"shell\":":[0],"\"bash\"\n":[0],"\"Run":[0],"Linter\",\n":[0],"sblint":[0],"example.asd\",\n":[0],"]\n":[0],"}\n}":[0],"see,":[0],"job:":[0],"Checkout":[0],"Install":[0],"Roswel":[0],"&":[0],"Qlot":[0],"40ants/setup-lisp":[0],"action.":[0],"Run":[0],"linter":[0],"example.asd":[0],"Another":[0],"interest":[0],"thing":[0],"that":[0],"automat":[0],"ubuntu-latest":[0],"OS":[0],",\n":[0],"sbcl-bin":[0],"implementation.":[0],"Later":[0],"show":[0],"redefin":[0],"these":[0],"settings.":[0],"Linter":[0],"similar":[0],"linter,":[0],"but":[0],"instead":[0],"SBL":[0],"int":[0],"runs\n":[0],"Critic":[0],"program":[0],"advic":[0],"more\nidiomatic,":[0],"readabl":[0],"performant.":[0],"Also,":[0],"sometim":[0],"might":[0],"catch":[0],"logical\nerror":[0],"add":[0],"workflow:":[0],"ci\n":[0],"((40ants-ci/jobs/critic:critic)))":[0],"combin":[0],"togeth":[0],"others,":[0],"example,\nwith":[0],"linter:":[0],"((40ants-ci/jobs/linter:linter)\n":[0],"(40ants-ci/jobs/critic:critic)))":[0],"thei":[0],"execut":[0],"parallel.":[0],"See":[0],"doc":[0],"40ants-ci/jobs/critic:crit":[0],"function\nto":[0],"learn":[0],"about":[0],"support":[0],"arguments.":[0],"40ants-ci/jobs/run-tests:run-test":[0],"type,":[0],"sure,":[0],"system\nrun":[0],"(ASDF:TEST-SYSTEM":[0],":system-name)":[0],"call\nand":[0],"signal":[0],"error":[0],"someth":[0],"went":[0],"wrong.":[0],"\n(defworkflow":[0],":by-cron":[0],"\"0":[0],"10":[0],"*":[0],"1\"\n":[0],"((40ants-ci/jobs/run-tests:run-tests\n":[0],":coverag":[0],"t)))\n":[0],"I've":[0],"ad":[0],"option":[0],"by-cron":[0],"-":[0],"set":[0],"schedule.":[0],"on-push-to":[0],"branch":[0],"or":[0],"track.":[0],".github/workflows/ci.yml":[0],"\"CI\",\n":[0],"\"push\":":[0],"\"branches\":":[0],"null,\n":[0],"\"schedule\":":[0],"\"cron\":":[0],"{\n\n":[0],"\"run-tests\":":[0],"Tests\",\n":[0],"\"40ants/run-tests@v2\",\n":[0],"\"example\",\n":[0],"\"coveralls-token\":":[0],"\"${{":[0],"secrets.github_token":[0],"}}\"\n":[0],"}\n}\n":[0],"result":[0],"Linter,\nbut":[0],"action\nat":[0],"final":[0],"step.":[0],"pass":[0],"t":[0],"job.":[0],"Thu":[0],"coverage\nreport":[0],"upload":[0],"Coveralls.io":[0],"automatically.":[0],"ha":[0],"mani":[0],"implement":[0],"platforms.":[0],"Thus\nit":[0],"good":[0],"idea":[0],"our":[0],"softwar":[0],"lisp\nimplementations.":[0],"Workflow":[0],"veri":[0],"easy.":[0],"definit":[0],"diment":[0],"matrix.\nIt":[0],"not":[0],"onli":[0],"under":[0],"differ":[0],"also":[0],"checks\nif":[0],"work":[0],"latest":[0],"Ultralisp":[0],"distributions:":[0],"((run-tests\n":[0],":o":[0],"(\"ubuntu-latest\"\n":[0],"\"macos-latest\")\n":[0],":quicklisp":[0],"(\"quicklisp\"\n":[0],"\"ultralisp\")\n":[0],":lisp":[0],"(\"sbcl-bin\"\n":[0],"\"ccl-bin\"\n":[0],"\"allegro\"\n":[0],"\"clisp\"\n":[0],"\"cmucl\")\n":[0],":exclud":[0],"(;;":[0],"Seem":[0],"allegro":[0],"doe":[0],"64bit":[0],"OSX.\n":[0],";;":[0],"Unabl":[0],"Roswell:\n":[0],"alisp":[0],"executable.":[0],"Miss":[0],"32bit":[0],"glibc?\n":[0],"(:o":[0],"\"macos-latest\"":[0],"\"allegro\")))))":[0],"Defin":[0],"Matrix":[0],"Besid":[0],"matrix,":[0],"same":[0],"type,\nbut":[0],"parameters:":[0],"\"sbcl-bin\")\n":[0],"(run-tests\n":[0],"\"ccl-bin\")\n":[0],"\"allegro\")))":[0],"jobs:":[0],"\"run-tests\",":[0],"\"run-tests-2\"":[0],"\"run-tests-3\".":[0],"Meaning":[0],"name":[0],"well:":[0],":name":[0],"\"test-on-sbcl\"\n":[0],"\"test-on-ccl\"\n":[0],"\"test-on-allegro\"\n":[0],"look":[0],"like":[0],"interface:":[0],"Multipl":[0],"Test":[0],"Third":[0],"40ants-ci/jobs/docs:build-doc":[0],".\nIt":[0],"document":[0],"builder":[0],"by\n":[0],"40ants/docs-build":[0],"To":[0],"everi":[0],"master,":[0],"just":[0],"code:":[0],"docs\n":[0],"((40ants-ci/jobs/docs:build-docs)))\n":[0],".github/workflows/docs.yml":[0],"\n{\n":[0],"\"DOCS\",\n":[0],"\"build-docs\":":[0],"\"qlfile-template\":":[0],"\"\"\n":[0],"\"Build":[0],"Docs\",\n":[0],"\"40ants/build-docs@v1\",\n":[0],"Build":[0],"Doc":[0],"Job":[0],"Type":[0],"significantli":[0],"speed":[0],"up":[0],"tests,":[0],"we":[0],"cach":[0],"Roswell,\nQlot":[0],"fasl":[0],"files.":[0],"accomplish":[0],"task,":[0],"need":[0],"dig":[0],"GitHub'":[0],"anymore!\nJust":[0],"line":[0],":cach":[0],"definition:":[0],"((40ants-ci/jobs/docs:build-docs)))":[0],"diff":[0],"steps,":[0],"automatically:":[0],"modifi":[0],".github/workflows/docs.yml\n@@":[0],"-20,13":[0],"+20,40":[0],"@@\n":[0],"},\n+":[0],"{\n+":[0],"\"Grant":[0],"All":[0],"Perm":[0],"Make":[0],"Cach":[0],"Restor":[0],"Possible\",\n+":[0],"\"sudo":[0],"mkdir":[0],"-p":[0],"/usr/local/etc/roswell\\n":[0],"sudo":[0],"chown":[0],"\\\"${USER}\\\"":[0],"#":[0],"binari":[0],"restored:\\n":[0],"/usr/local/bin\",\n+":[0],"\"bash\"\n+":[0],"\"Get":[0],"Current":[0],"Month\",\n+":[0],"\"id\":":[0],"\"current-month\",\n+":[0],"\"echo":[0],"\\\"::set-output":[0],"name=value::$(d":[0],"-u":[0],"\\\"+%Y-%m\\\")\\\"\",\n+":[0],"\"Cach":[0],"Setup\",\n+":[0],"\"cache\",\n+":[0],"\"actions/cache@v3\",\n+":[0],"\"path\":":[0],"\"qlfile\\n":[0],"qlfile.lock\\n":[0],"/usr/local/bin/ros\\n":[0],"~/.cache/common-lisp/\\n":[0],"~/.roswell\\n":[0],".qlot\",\n+":[0],"\"key\":":[0],"steps.current-month.outputs.valu":[0],"}}-${{":[0],"env.cache-nam":[0],"}}-ubuntu-latest-quicklisp-sbcl-bin-${{":[0],"hashFiles('qlfile.lock')":[0],"}}\"\n+":[0],"}\n+":[0],"\"Restor":[0],"Path":[0],"Files\",\n+":[0],"$HOME/.roswell/bin":[0],">>":[0],"$GITHUB_PATH\\n":[0],"echo":[0],".qlot/bin":[0],"$GITHUB_PATH\",\n+":[0],"\"bash\",\n+":[0],"\"if\":":[0],"\"steps.cache.outputs.cache-hit":[0],"==":[0],"'true'\"\n+":[0],"\"40ants-ci\",\n":[0],"\"\"\n-":[0],"!=":[0],"'true'\"\n":[0],"{":[0],"Quickstart":[0],"TODO":[0],":":[0],"I":[0],"chapter":[0],"detail":[0],"addit":[0],"job'":[0],"parameters\nand":[0],"But":[0],"now,":[0],"want":[0],"example,":[0],"a\njob":[0],"take":[0],"care":[0],"call":[0],"custom":[0],"step:":[0],"((40ants-ci/jobs/lisp-job:lisp-job":[0],"\"check-ros-config\"\n":[0],":step":[0],"((40ants-ci/steps/sh:sh":[0],"\"Show":[0],"Config\"\n":[0],"\"ro":[0],"config\")))))":[0],"class":[0],"40ants-ci/jobs/lisp-job:lisp-job":[0],"base":[0],"most":[0],"system\nand":[0],"40ants-ci/steps/sh:sh":[0],"it.":[0],"after":[0],"repostori":[0],"checkout":[0],"CCL-BIN":[0],"installation.\nso,":[0],"thu":[0],"config":[0],"command,":[0],"output":[0],"that:":[0],"asdf.version=3.3.5.3\nccl-bin.version=1.12.2\nsetup.time=3918000017\nsbcl-bin.version=2.4.1\ndefault.lisp=ccl-bin\n\nPoss":[0],"subcommands:\nset\nshow":[0],"Pai":[0],"attent":[0],"NAME":[0],"argument":[0],"class.":[0],"If":[0],"omit":[0],"it,":[0],"default":[0],"\"lisp-job\"":[0],"used.":[0],"Gener":[0],"given":[0],"function":[0],"search":[0],"packages\nof":[0],"PATH":[0],"given,":[0],"written\nto":[0],".github/workflow/":[0],"relar":[0],"SYSTEM":[0],"Function":[0],"system,":[0],"variabl":[0],"contain":[0],"primari":[0],"Variabl":[0],"40ANTS-CI/GITHUB":[0],"Reader":[0],"File":[0],"version":[0],"numbers.":[0],"Regexp":[0],"extract":[0],"Tag":[0],"prefix.":[0],"Auth":[0],"token":[0],"pattern.":[0],"AUTOTAG":[0],"Class":[0],"40ANTS-CI/JOBS/AUTOTAG":[0],"valid":[0],"than":[0],"one.":[0],"list":[0],"strign":[0],"critiqu":[0],"ignore.":[0],"CRITIC":[0],"ASDF-SYSTEMS":[0],"NIL":[0],"system\nto":[0],"current":[0],"belong.":[0],"mai":[0],"ASDF-VERSION":[0],"argument.":[0],"be\na":[0],"string.":[0],"By":[0],"default,":[0],"40ANTS-CI/JOBS/CRITIC":[0],"\"40ants/build-docs\"":[0],"github":[0],"BUILD-DOCS":[0],"build-doc":[0],"40ANTS-CI/JOBS/DOCS":[0],"plist":[0],"denot":[0],"matrix":[0],"excluded.":[0],"slot":[0],"hold":[0],"STEPS":[0],"constructor.":[0],"class,":[0],"around":[0],"explicit":[0],"An":[0],"alist":[0],"environ":[0],"their":[0],"valu":[0],"level.":[0],"Valu":[0],"evalu":[0],"runtime.":[0],"wa":[0],"constructor,":[0],"lowercas":[0],"permiss":[0],"bound":[0],"secrets.GITHUB_TOKEN":[0],"variable.\nUs":[0],"default-initarg":[0],"overrid":[0],"subclasses:":[0],"(:default-initargs\n":[0],":permiss":[0],"'(:content":[0],"\"write\"))":[0],"JOB":[0],"Should":[0],"return":[0],"map":[0],"from":[0],"string":[0],"kei":[0],"scope":[0],"names.":[0],"Default":[0],"method":[0],"\"permissions\"":[0],"slot.":[0],"40ANTS-CI/JOBS/JOB":[0],"miss":[0],"unus":[0],"import":[0],"package-inf":[0],"LINTER":[0],"no":[0],"ASD":[0],"from\nth":[0],"40ANTS-CI/JOBS/LINTER":[0],"sources,":[0],"Qlot.":[0],"between":[0],"runs.":[0],"environment.":[0],"version,":[0],"pin":[0],"setup-lisp":[0],"LISP-JOB":[0],"40ANTS-CI/JOBS/LISP-JOB":[0],"RUN-TESTS":[0],"run-test":[0],"40ANTS-CI/JOBS/RUN-TESTS":[0],"\"with\"":[0],"dictionari":[0],"ACTION":[0],"40ANTS-CI/STEPS/ACTION":[0],"SH":[0],"Return":[0],"bash":[0],"script":[0],"some":[0],"grouped.":[0],"3":[0],"sections:":[0],"(sections\n":[0],"(\"Help":[0],"Argument\"\n":[0],"cl-info":[0],"--help\")\n":[0],"(\"Version":[0],"--version\")\n":[0],"(\"Lisp":[0],"Info\"\n":[0],"cl-info\"\n":[0],"defmain\"))":[0],"into:":[0],"::group::Help":[0],"Argument\nqlot":[0],"--help\necho":[0],"::endgroup::\necho":[0],"::group::Vers":[0],"--version\necho":[0],"::group::Lisp":[0],"Info\nqlot":[0],"cl-info\nqlot":[0],"defmain\necho":[0],"::endgroup::":[0],"Macro":[0],"40ANTS-CI/STEPS/SH":[0],"variables.":[0],"STEP":[0],"40ANTS-CI/STEPS/STEP":[0],"by":[0],"match":[0],"subsystems:":[0],"CL-USER>":[0],"(docs-builder/utils:system-packag":[0],":docs-builder)\n(#\n":[0],"#\n":[0],"\"DOCS-BUILDER/GUESSER\">\n":[0],"\"DOCS-BUILDER/BUILDERS/GENEVA/GUESSER\">\n":[0],"\"DOCS-BUILDER/BUILDER\">\n":[0],"\"DOCS-BUILDER/BUILDERS/MGL-PAX/GUESSER\">\n":[0],"\"DOCS-BUILDER/DOCS\">\n":[0],"\"DOCS-BUILDER/BUILDERS/MGL-PAX/BUILDER\">)":[0],"wheather":[0],"LIST":[0],"properli":[0],"form":[0],"alist.":[0],"library,":[0],"alwai":[0],"key.\nBecaus":[0],"them":[0],"serialize\nto":[0],"JSON":[0],"propertly.":[0],"(alistp":[0],"'((\"cron\"":[0],"1\")))":[0],"->":[0],"T\n(alistp":[0],"'(((\"cron\"":[0],"1\"))))":[0],"Remov":[0],"common":[0],"lead":[0],"whitespac":[0],"examples:":[0],"(dedent":[0],"\"Hello\n":[0],"World\n":[0],"Lispers!\")\n\n\"Hello\nWorld\nand":[0],"Lispers!\"":[0],"\"\n":[0],"Hello\n":[0],"\"Thi":[0],"code:\n\n":[0],"(symbol-nam":[0],":hello-world)\n\n":[0],"HELLO-WORLD.\")\n\n\"Thi":[0],":hello-world)\n\nit":[0],"HELLO-WORLD.\"":[0],"PLIST":[0],"transform":[0],"plist.":[0],"exactli":[0],"element.":[0],"40ANTS-CI/UTILS":[0],"prepar":[0],"data":[0],"generation.":[0],"40ANTS-CI/VARS":[0],"API":[0],"40Ants-CI":[0],"Github":[0],"Initial":[1],"version.":[1],"0.1.0":[1],"(2023-02-05)":[1],"ChangeLog":[1]},"titles":["40Ants-CI - Github Workflow Generator","ChangeLog"],"titleterms":[]}) diff --git a/searchtools.js b/searchtools.js new file mode 100644 index 0000000..c0180d7 --- /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 = $('