-
- Read the Docs
- v: ${config.versions.current.slug}
-
-
-
-
- ${renderLanguages(config)}
- ${renderVersions(config)}
- ${renderDownloads(config)}
-
- On Read the Docs
-
- Project Home
-
-
- Builds
-
-
- Downloads
-
-
-
- Search
-
-
-
-
-
-
- Hosted by Read the Docs
-
-
-
- `;
-
- // Inject the generated flyout into the body HTML element.
- document.body.insertAdjacentHTML("beforeend", flyout);
-
- // Trigger the Read the Docs Addons Search modal when clicking on the "Search docs" input from inside the flyout.
- document
- .querySelector("#flyout-search-form")
- .addEventListener("focusin", () => {
- const event = new CustomEvent("readthedocs-search-show");
- document.dispatchEvent(event);
- });
- })
-}
-
-if (themeLanguageSelector || themeVersionSelector) {
- function onSelectorSwitch(event) {
- const option = event.target.selectedIndex;
- const item = event.target.options[option];
- window.location.href = item.dataset.url;
- }
-
- document.addEventListener("readthedocs-addons-data-ready", function (event) {
- const config = event.detail.data();
-
- const versionSwitch = document.querySelector(
- "div.switch-menus > div.version-switch",
- );
- if (themeVersionSelector) {
- let versions = config.versions.active;
- if (config.versions.current.hidden || config.versions.current.type === "external") {
- versions.unshift(config.versions.current);
- }
- const versionSelect = `
-
- ${versions
- .map(
- (version) => `
-
- ${version.slug}
- `,
- )
- .join("\n")}
-
- `;
-
- versionSwitch.innerHTML = versionSelect;
- versionSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
- }
-
- const languageSwitch = document.querySelector(
- "div.switch-menus > div.language-switch",
- );
-
- if (themeLanguageSelector) {
- if (config.projects.translations.length) {
- // Add the current language to the options on the selector
- let languages = config.projects.translations.concat(
- config.projects.current,
- );
- languages = languages.sort((a, b) =>
- a.language.name.localeCompare(b.language.name),
- );
-
- const languageSelect = `
-
- ${languages
- .map(
- (language) => `
-
- ${language.language.name}
- `,
- )
- .join("\n")}
-
- `;
-
- languageSwitch.innerHTML = languageSelect;
- languageSwitch.firstElementChild.addEventListener("change", onSelectorSwitch);
- }
- else {
- languageSwitch.remove();
- }
- }
- });
-}
-
-document.addEventListener("readthedocs-addons-data-ready", function (event) {
- // Trigger the Read the Docs Addons Search modal when clicking on "Search docs" input from the topnav.
- document
- .querySelector("[role='search'] input")
- .addEventListener("focusin", () => {
- const event = new CustomEvent("readthedocs-search-show");
- document.dispatchEvent(event);
- });
-});
\ No newline at end of file
diff --git a/devel/html/_static/language_data.js b/devel/html/_static/language_data.js
deleted file mode 100644
index c7fe6c6..0000000
--- a/devel/html/_static/language_data.js
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * This script contains the language-specific data used by searchtools.js,
- * namely the list of stopwords, stemmer, scorer and splitter.
- */
-
-var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
-
-
-/* Non-minified version is copied as a separate JS file, if available */
-
-/**
- * Porter Stemmer
- */
-var Stemmer = function() {
-
- var step2list = {
- ational: 'ate',
- tional: 'tion',
- enci: 'ence',
- anci: 'ance',
- izer: 'ize',
- bli: 'ble',
- alli: 'al',
- entli: 'ent',
- eli: 'e',
- ousli: 'ous',
- ization: 'ize',
- ation: 'ate',
- ator: 'ate',
- alism: 'al',
- iveness: 'ive',
- fulness: 'ful',
- ousness: 'ous',
- aliti: 'al',
- iviti: 'ive',
- biliti: 'ble',
- logi: 'log'
- };
-
- var step3list = {
- icate: 'ic',
- ative: '',
- alize: 'al',
- iciti: 'ic',
- ical: 'ic',
- ful: '',
- ness: ''
- };
-
- var c = "[^aeiou]"; // consonant
- var v = "[aeiouy]"; // vowel
- var C = c + "[^aeiouy]*"; // consonant sequence
- var V = v + "[aeiou]*"; // vowel sequence
-
- var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
- 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;
- }
-}
-
diff --git a/devel/html/_static/minus.png b/devel/html/_static/minus.png
deleted file mode 100644
index d96755f..0000000
Binary files a/devel/html/_static/minus.png and /dev/null differ
diff --git a/devel/html/_static/plus.png b/devel/html/_static/plus.png
deleted file mode 100644
index 7107cec..0000000
Binary files a/devel/html/_static/plus.png and /dev/null differ
diff --git a/devel/html/_static/product-logo-ex-rail.png b/devel/html/_static/product-logo-ex-rail.png
deleted file mode 100644
index e642bd5..0000000
Binary files a/devel/html/_static/product-logo-ex-rail.png and /dev/null differ
diff --git a/devel/html/_static/pygments.css b/devel/html/_static/pygments.css
deleted file mode 100644
index 6f8b210..0000000
--- a/devel/html/_static/pygments.css
+++ /dev/null
@@ -1,75 +0,0 @@
-pre { line-height: 125%; }
-td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
-td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
-.highlight .hll { background-color: #ffffcc }
-.highlight { background: #f8f8f8; }
-.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */
-.highlight .err { border: 1px solid #F00 } /* Error */
-.highlight .k { color: #008000; font-weight: bold } /* Keyword */
-.highlight .o { color: #666 } /* Operator */
-.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */
-.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */
-.highlight .cp { color: #9C6500 } /* Comment.Preproc */
-.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */
-.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */
-.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */
-.highlight .gd { color: #A00000 } /* Generic.Deleted */
-.highlight .ge { font-style: italic } /* Generic.Emph */
-.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
-.highlight .gr { color: #E40000 } /* Generic.Error */
-.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
-.highlight .gi { color: #008400 } /* Generic.Inserted */
-.highlight .go { color: #717171 } /* Generic.Output */
-.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
-.highlight .gs { font-weight: bold } /* Generic.Strong */
-.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
-.highlight .gt { color: #04D } /* Generic.Traceback */
-.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
-.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
-.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
-.highlight .kp { color: #008000 } /* Keyword.Pseudo */
-.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
-.highlight .kt { color: #B00040 } /* Keyword.Type */
-.highlight .m { color: #666 } /* Literal.Number */
-.highlight .s { color: #BA2121 } /* Literal.String */
-.highlight .na { color: #687822 } /* Name.Attribute */
-.highlight .nb { color: #008000 } /* Name.Builtin */
-.highlight .nc { color: #00F; font-weight: bold } /* Name.Class */
-.highlight .no { color: #800 } /* Name.Constant */
-.highlight .nd { color: #A2F } /* Name.Decorator */
-.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */
-.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */
-.highlight .nf { color: #00F } /* Name.Function */
-.highlight .nl { color: #767600 } /* Name.Label */
-.highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */
-.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */
-.highlight .nv { color: #19177C } /* Name.Variable */
-.highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */
-.highlight .w { color: #BBB } /* Text.Whitespace */
-.highlight .mb { color: #666 } /* Literal.Number.Bin */
-.highlight .mf { color: #666 } /* Literal.Number.Float */
-.highlight .mh { color: #666 } /* Literal.Number.Hex */
-.highlight .mi { color: #666 } /* Literal.Number.Integer */
-.highlight .mo { color: #666 } /* Literal.Number.Oct */
-.highlight .sa { color: #BA2121 } /* Literal.String.Affix */
-.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */
-.highlight .sc { color: #BA2121 } /* Literal.String.Char */
-.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */
-.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
-.highlight .s2 { color: #BA2121 } /* Literal.String.Double */
-.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */
-.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */
-.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */
-.highlight .sx { color: #008000 } /* Literal.String.Other */
-.highlight .sr { color: #A45A77 } /* Literal.String.Regex */
-.highlight .s1 { color: #BA2121 } /* Literal.String.Single */
-.highlight .ss { color: #19177C } /* Literal.String.Symbol */
-.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */
-.highlight .fm { color: #00F } /* Name.Function.Magic */
-.highlight .vc { color: #19177C } /* Name.Variable.Class */
-.highlight .vg { color: #19177C } /* Name.Variable.Global */
-.highlight .vi { color: #19177C } /* Name.Variable.Instance */
-.highlight .vm { color: #19177C } /* Name.Variable.Magic */
-.highlight .il { color: #666 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/devel/html/_static/searchtools.js b/devel/html/_static/searchtools.js
deleted file mode 100644
index 2c774d1..0000000
--- a/devel/html/_static/searchtools.js
+++ /dev/null
@@ -1,632 +0,0 @@
-/*
- * Sphinx JavaScript utilities for the full-text search.
- */
-"use strict";
-
-/**
- * Simple result scoring code.
- */
-if (typeof Scorer === "undefined") {
- var Scorer = {
- // Implement the following function to further tweak the score for each result
- // The function takes a result array [docname, title, anchor, descr, score, filename]
- // and returns the new score.
- /*
- score: result => {
- const [docname, title, anchor, descr, score, filename, kind] = result
- return score
- },
- */
-
- // 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,
- };
-}
-
-// Global search result kind enum, used by themes to style search results.
-class SearchResultKind {
- static get index() { return "index"; }
- static get object() { return "object"; }
- static get text() { return "text"; }
- static get title() { return "title"; }
-}
-
-const _removeChildren = (element) => {
- while (element && element.lastChild) element.removeChild(element.lastChild);
-};
-
-/**
- * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping
- */
-const _escapeRegExp = (string) =>
- string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string
-
-const _displayItem = (item, searchTerms, highlightTerms) => {
- const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
- const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
- const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
- const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
- const contentRoot = document.documentElement.dataset.content_root;
-
- const [docName, title, anchor, descr, score, _filename, kind] = item;
-
- let listItem = document.createElement("li");
- // Add a class representing the item's type:
- // can be used by a theme's CSS selector for styling
- // See SearchResultKind for the class names.
- listItem.classList.add(`kind-${kind}`);
- let requestUrl;
- let linkUrl;
- if (docBuilder === "dirhtml") {
- // dirhtml builder
- let dirname = docName + "/";
- if (dirname.match(/\/index\/$/))
- dirname = dirname.substring(0, dirname.length - 6);
- else if (dirname === "index/") dirname = "";
- requestUrl = contentRoot + dirname;
- linkUrl = requestUrl;
- } else {
- // normal html builders
- requestUrl = contentRoot + docName + docFileSuffix;
- linkUrl = docName + docLinkSuffix;
- }
- let linkEl = listItem.appendChild(document.createElement("a"));
- linkEl.href = linkUrl + anchor;
- linkEl.dataset.score = score;
- linkEl.innerHTML = title;
- if (descr) {
- listItem.appendChild(document.createElement("span")).innerHTML =
- " (" + descr + ")";
- // highlight search terms in the description
- if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
- highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
- }
- else if (showSearchSummary)
- fetch(requestUrl)
- .then((responseData) => responseData.text())
- .then((data) => {
- if (data)
- listItem.appendChild(
- Search.makeSearchSummary(data, searchTerms, anchor)
- );
- // highlight search terms in the summary
- if (SPHINX_HIGHLIGHT_ENABLED) // set in sphinx_highlight.js
- highlightTerms.forEach((term) => _highlightText(listItem, term, "highlighted"));
- });
- Search.output.appendChild(listItem);
-};
-const _finishSearch = (resultCount) => {
- Search.stopPulse();
- Search.title.innerText = _("Search Results");
- if (!resultCount)
- Search.status.innerText = Documentation.gettext(
- "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories."
- );
- else
- Search.status.innerText = Documentation.ngettext(
- "Search finished, found one page matching the search query.",
- "Search finished, found ${resultCount} pages matching the search query.",
- resultCount,
- ).replace('${resultCount}', resultCount);
-};
-const _displayNextItem = (
- results,
- resultCount,
- searchTerms,
- highlightTerms,
-) => {
- // results left, load the summary and display it
- // this is intended to be dynamic (don't sub resultsCount)
- if (results.length) {
- _displayItem(results.pop(), searchTerms, highlightTerms);
- setTimeout(
- () => _displayNextItem(results, resultCount, searchTerms, highlightTerms),
- 5
- );
- }
- // search finished, update title and status message
- else _finishSearch(resultCount);
-};
-// Helper function used by query() to order search results.
-// Each input is an array of [docname, title, anchor, descr, score, filename, kind].
-// Order the results by score (in opposite order of appearance, since the
-// `_displayNextItem` function uses pop() to retrieve items) and then alphabetically.
-const _orderResultsByScoreThenName = (a, b) => {
- const leftScore = a[4];
- const rightScore = b[4];
- if (leftScore === rightScore) {
- // same score: sort alphabetically
- const leftTitle = a[1].toLowerCase();
- const rightTitle = b[1].toLowerCase();
- if (leftTitle === rightTitle) return 0;
- return leftTitle > rightTitle ? -1 : 1; // inverted is intentional
- }
- return leftScore > rightScore ? 1 : -1;
-};
-
-/**
- * Default splitQuery function. Can be overridden in ``sphinx.search`` with a
- * custom function per language.
- *
- * The regular expression works by splitting the string on consecutive characters
- * that are not Unicode letters, numbers, underscores, or emoji characters.
- * This is the same as ``\W+`` in Python, preserving the surrogate pair area.
- */
-if (typeof splitQuery === "undefined") {
- var splitQuery = (query) => query
- .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu)
- .filter(term => term) // remove remaining empty strings
-}
-
-/**
- * Search Module
- */
-const Search = {
- _index: null,
- _queued_query: null,
- _pulse_status: -1,
-
- htmlToText: (htmlString, anchor) => {
- const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
- for (const removalQuery of [".headerlink", "script", "style"]) {
- htmlElement.querySelectorAll(removalQuery).forEach((el) => { el.remove() });
- }
- if (anchor) {
- const anchorContent = htmlElement.querySelector(`[role="main"] ${anchor}`);
- if (anchorContent) return anchorContent.textContent;
-
- console.warn(
- `Anchored content block not found. Sphinx search tries to obtain it via DOM query '[role=main] ${anchor}'. Check your theme or template.`
- );
- }
-
- // if anchor not specified or not found, fall back to main content
- const docContent = htmlElement.querySelector('[role="main"]');
- if (docContent) return docContent.textContent;
-
- console.warn(
- "Content block not found. Sphinx search tries to obtain it via DOM query '[role=main]'. Check your theme or template."
- );
- return "";
- },
-
- init: () => {
- const query = new URLSearchParams(window.location.search).get("q");
- document
- .querySelectorAll('input[name="q"]')
- .forEach((el) => (el.value = query));
- if (query) Search.performSearch(query);
- },
-
- loadIndex: (url) =>
- (document.body.appendChild(document.createElement("script")).src = url),
-
- setIndex: (index) => {
- Search._index = index;
- if (Search._queued_query !== null) {
- const query = Search._queued_query;
- Search._queued_query = null;
- Search.query(query);
- }
- },
-
- hasIndex: () => Search._index !== null,
-
- deferQuery: (query) => (Search._queued_query = query),
-
- stopPulse: () => (Search._pulse_status = -1),
-
- startPulse: () => {
- if (Search._pulse_status >= 0) return;
-
- const pulse = () => {
- Search._pulse_status = (Search._pulse_status + 1) % 4;
- Search.dots.innerText = ".".repeat(Search._pulse_status);
- if (Search._pulse_status >= 0) window.setTimeout(pulse, 500);
- };
- pulse();
- },
-
- /**
- * perform a search for something (or wait until index is loaded)
- */
- performSearch: (query) => {
- // create the required interface elements
- const searchText = document.createElement("h2");
- searchText.textContent = _("Searching");
- const searchSummary = document.createElement("p");
- searchSummary.classList.add("search-summary");
- searchSummary.innerText = "";
- const searchList = document.createElement("ul");
- searchList.setAttribute("role", "list");
- searchList.classList.add("search");
-
- const out = document.getElementById("search-results");
- Search.title = out.appendChild(searchText);
- Search.dots = Search.title.appendChild(document.createElement("span"));
- Search.status = out.appendChild(searchSummary);
- Search.output = out.appendChild(searchList);
-
- const searchProgress = document.getElementById("search-progress");
- // Some themes don't use the search progress node
- if (searchProgress) {
- searchProgress.innerText = _("Preparing search...");
- }
- Search.startPulse();
-
- // index already loaded, the browser was quick!
- if (Search.hasIndex()) Search.query(query);
- else Search.deferQuery(query);
- },
-
- _parseQuery: (query) => {
- // stem the search terms and add them to the correct list
- const stemmer = new Stemmer();
- const searchTerms = new Set();
- const excludedTerms = new Set();
- const highlightTerms = new Set();
- const objectTerms = new Set(splitQuery(query.toLowerCase().trim()));
- splitQuery(query.trim()).forEach((queryTerm) => {
- const queryTermLower = queryTerm.toLowerCase();
-
- // maybe skip this "word"
- // stopwords array is from language_data.js
- if (
- stopwords.indexOf(queryTermLower) !== -1 ||
- queryTerm.match(/^\d+$/)
- )
- return;
-
- // stem the word
- let word = stemmer.stemWord(queryTermLower);
- // select the correct list
- if (word[0] === "-") excludedTerms.add(word.substr(1));
- else {
- searchTerms.add(word);
- highlightTerms.add(queryTermLower);
- }
- });
-
- if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js
- localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" "))
- }
-
- // console.debug("SEARCH: searching for:");
- // console.info("required: ", [...searchTerms]);
- // console.info("excluded: ", [...excludedTerms]);
-
- return [query, searchTerms, excludedTerms, highlightTerms, objectTerms];
- },
-
- /**
- * execute search (requires search index to be loaded)
- */
- _performSearch: (query, searchTerms, excludedTerms, highlightTerms, objectTerms) => {
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const titles = Search._index.titles;
- const allTitles = Search._index.alltitles;
- const indexEntries = Search._index.indexentries;
-
- // Collect multiple result groups to be sorted separately and then ordered.
- // Each is an array of [docname, title, anchor, descr, score, filename, kind].
- const normalResults = [];
- const nonMainIndexResults = [];
-
- _removeChildren(document.getElementById("search-progress"));
-
- const queryLower = query.toLowerCase().trim();
- for (const [title, foundTitles] of Object.entries(allTitles)) {
- if (title.toLowerCase().trim().includes(queryLower) && (queryLower.length >= title.length/2)) {
- for (const [file, id] of foundTitles) {
- const score = Math.round(Scorer.title * queryLower.length / title.length);
- const boost = titles[file] === title ? 1 : 0; // add a boost for document titles
- normalResults.push([
- docNames[file],
- titles[file] !== title ? `${titles[file]} > ${title}` : title,
- id !== null ? "#" + id : "",
- null,
- score + boost,
- filenames[file],
- SearchResultKind.title,
- ]);
- }
- }
- }
-
- // search for explicit entries in index directives
- for (const [entry, foundEntries] of Object.entries(indexEntries)) {
- if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) {
- for (const [file, id, isMain] of foundEntries) {
- const score = Math.round(100 * queryLower.length / entry.length);
- const result = [
- docNames[file],
- titles[file],
- id ? "#" + id : "",
- null,
- score,
- filenames[file],
- SearchResultKind.index,
- ];
- if (isMain) {
- normalResults.push(result);
- } else {
- nonMainIndexResults.push(result);
- }
- }
- }
- }
-
- // lookup as object
- objectTerms.forEach((term) =>
- normalResults.push(...Search.performObjectSearch(term, objectTerms))
- );
-
- // lookup as search terms in fulltext
- normalResults.push(...Search.performTermsSearch(searchTerms, excludedTerms));
-
- // let the scorer override scores with a custom scoring function
- if (Scorer.score) {
- normalResults.forEach((item) => (item[4] = Scorer.score(item)));
- nonMainIndexResults.forEach((item) => (item[4] = Scorer.score(item)));
- }
-
- // Sort each group of results by score and then alphabetically by name.
- normalResults.sort(_orderResultsByScoreThenName);
- nonMainIndexResults.sort(_orderResultsByScoreThenName);
-
- // Combine the result groups in (reverse) order.
- // Non-main index entries are typically arbitrary cross-references,
- // so display them after other results.
- let results = [...nonMainIndexResults, ...normalResults];
-
- // remove duplicate search results
- // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept
- let seen = new Set();
- results = results.reverse().reduce((acc, result) => {
- let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(',');
- if (!seen.has(resultStr)) {
- acc.push(result);
- seen.add(resultStr);
- }
- return acc;
- }, []);
-
- return results.reverse();
- },
-
- query: (query) => {
- const [searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms] = Search._parseQuery(query);
- const results = Search._performSearch(searchQuery, searchTerms, excludedTerms, highlightTerms, objectTerms);
-
- // for debugging
- //Search.lastresults = results.slice(); // a copy
- // console.info("search results:", Search.lastresults);
-
- // print the results
- _displayNextItem(results, results.length, searchTerms, highlightTerms);
- },
-
- /**
- * search for object names
- */
- performObjectSearch: (object, objectTerms) => {
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const objects = Search._index.objects;
- const objNames = Search._index.objnames;
- const titles = Search._index.titles;
-
- const results = [];
-
- const objectSearchCallback = (prefix, match) => {
- const name = match[4]
- const fullname = (prefix ? prefix + "." : "") + name;
- const fullnameLower = fullname.toLowerCase();
- if (fullnameLower.indexOf(object) < 0) return;
-
- let score = 0;
- const parts = fullnameLower.split(".");
-
- // check for different match types: exact matches of full name or
- // "last name" (i.e. last dotted part)
- if (fullnameLower === object || parts.slice(-1)[0] === object)
- score += Scorer.objNameMatch;
- else if (parts.slice(-1)[0].indexOf(object) > -1)
- score += Scorer.objPartialMatch; // matches in last name
-
- const objName = objNames[match[1]][2];
- const title = titles[match[0]];
-
- // If more than one term searched for, we require other words to be
- // found in the name/title/description
- const otherTerms = new Set(objectTerms);
- otherTerms.delete(object);
- if (otherTerms.size > 0) {
- const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase();
- if (
- [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0)
- )
- return;
- }
-
- let anchor = match[3];
- if (anchor === "") anchor = fullname;
- else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname;
-
- const descr = objName + _(", in ") + title;
-
- // add custom score for some objects according to scorer
- if (Scorer.objPrio.hasOwnProperty(match[2]))
- score += Scorer.objPrio[match[2]];
- else score += Scorer.objPrioDefault;
-
- results.push([
- docNames[match[0]],
- fullname,
- "#" + anchor,
- descr,
- score,
- filenames[match[0]],
- SearchResultKind.object,
- ]);
- };
- Object.keys(objects).forEach((prefix) =>
- objects[prefix].forEach((array) =>
- objectSearchCallback(prefix, array)
- )
- );
- return results;
- },
-
- /**
- * search for full-text terms in the index
- */
- performTermsSearch: (searchTerms, excludedTerms) => {
- // prepare search
- const terms = Search._index.terms;
- const titleTerms = Search._index.titleterms;
- const filenames = Search._index.filenames;
- const docNames = Search._index.docnames;
- const titles = Search._index.titles;
-
- const scoreMap = new Map();
- const fileMap = new Map();
-
- // perform the search on the required terms
- searchTerms.forEach((word) => {
- const files = [];
- const arr = [
- { files: terms[word], score: Scorer.term },
- { files: titleTerms[word], score: Scorer.title },
- ];
- // add support for partial matches
- if (word.length > 2) {
- const escapedWord = _escapeRegExp(word);
- if (!terms.hasOwnProperty(word)) {
- Object.keys(terms).forEach((term) => {
- if (term.match(escapedWord))
- arr.push({ files: terms[term], score: Scorer.partialTerm });
- });
- }
- if (!titleTerms.hasOwnProperty(word)) {
- Object.keys(titleTerms).forEach((term) => {
- if (term.match(escapedWord))
- arr.push({ files: titleTerms[term], score: Scorer.partialTitle });
- });
- }
- }
-
- // no match but word was a required one
- if (arr.every((record) => record.files === undefined)) return;
-
- // found search word in contents
- arr.forEach((record) => {
- if (record.files === undefined) return;
-
- let recordFiles = record.files;
- if (recordFiles.length === undefined) recordFiles = [recordFiles];
- files.push(...recordFiles);
-
- // set score for the word in each file
- recordFiles.forEach((file) => {
- if (!scoreMap.has(file)) scoreMap.set(file, {});
- scoreMap.get(file)[word] = record.score;
- });
- });
-
- // create the mapping
- files.forEach((file) => {
- if (!fileMap.has(file)) fileMap.set(file, [word]);
- else if (fileMap.get(file).indexOf(word) === -1) fileMap.get(file).push(word);
- });
- });
-
- // now check if the files don't contain excluded terms
- const results = [];
- for (const [file, wordList] of fileMap) {
- // check if all requirements are matched
-
- // as search terms with length < 3 are discarded
- const filteredTermCount = [...searchTerms].filter(
- (term) => term.length > 2
- ).length;
- if (
- wordList.length !== searchTerms.size &&
- wordList.length !== filteredTermCount
- )
- continue;
-
- // ensure that none of the excluded terms is in the search result
- if (
- [...excludedTerms].some(
- (term) =>
- terms[term] === file ||
- titleTerms[term] === file ||
- (terms[term] || []).includes(file) ||
- (titleTerms[term] || []).includes(file)
- )
- )
- break;
-
- // select one (max) score for the file.
- const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w]));
- // add result to the result list
- results.push([
- docNames[file],
- titles[file],
- "",
- null,
- score,
- filenames[file],
- SearchResultKind.text,
- ]);
- }
- return results;
- },
-
- /**
- * helper function to return a node containing the
- * search summary for a given text. keywords is a list
- * of stemmed words.
- */
- makeSearchSummary: (htmlText, keywords, anchor) => {
- const text = Search.htmlToText(htmlText, anchor);
- if (text === "") return null;
-
- const textLower = text.toLowerCase();
- const actualStartPosition = [...keywords]
- .map((k) => textLower.indexOf(k.toLowerCase()))
- .filter((i) => i > -1)
- .slice(-1)[0];
- const startWithContext = Math.max(actualStartPosition - 120, 0);
-
- const top = startWithContext === 0 ? "" : "...";
- const tail = startWithContext + 240 < text.length ? "..." : "";
-
- let summary = document.createElement("p");
- summary.classList.add("context");
- summary.textContent = top + text.substr(startWithContext, 240).trim() + tail;
-
- return summary;
- },
-};
-
-_ready(Search.init);
diff --git a/devel/html/_static/sphinx_highlight.js b/devel/html/_static/sphinx_highlight.js
deleted file mode 100644
index 8a96c69..0000000
--- a/devel/html/_static/sphinx_highlight.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/* Highlighting utilities for Sphinx HTML documentation. */
-"use strict";
-
-const SPHINX_HIGHLIGHT_ENABLED = true
-
-/**
- * highlight a given string on a node by wrapping it in
- * span elements with the given class name.
- */
-const _highlight = (node, addItems, text, className) => {
- if (node.nodeType === Node.TEXT_NODE) {
- const val = node.nodeValue;
- const parent = node.parentNode;
- const pos = val.toLowerCase().indexOf(text);
- if (
- pos >= 0 &&
- !parent.classList.contains(className) &&
- !parent.classList.contains("nohighlight")
- ) {
- let span;
-
- const closestNode = parent.closest("body, svg, foreignObject");
- const isInSVG = closestNode && closestNode.matches("svg");
- if (isInSVG) {
- span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
- } else {
- span = document.createElement("span");
- span.classList.add(className);
- }
-
- span.appendChild(document.createTextNode(val.substr(pos, text.length)));
- const rest = document.createTextNode(val.substr(pos + text.length));
- parent.insertBefore(
- span,
- parent.insertBefore(
- rest,
- node.nextSibling
- )
- );
- node.nodeValue = val.substr(0, pos);
- /* There may be more occurrences of search term in this node. So call this
- * function recursively on the remaining fragment.
- */
- _highlight(rest, addItems, text, className);
-
- if (isInSVG) {
- const rect = document.createElementNS(
- "http://www.w3.org/2000/svg",
- "rect"
- );
- const bbox = parent.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: parent, target: rect });
- }
- }
- } else if (node.matches && !node.matches("button, select, textarea")) {
- node.childNodes.forEach((el) => _highlight(el, addItems, text, className));
- }
-};
-const _highlightText = (thisNode, text, className) => {
- let addItems = [];
- _highlight(thisNode, addItems, text, className);
- addItems.forEach((obj) =>
- obj.parent.insertAdjacentElement("beforebegin", obj.target)
- );
-};
-
-/**
- * Small JavaScript module for the documentation.
- */
-const SphinxHighlight = {
-
- /**
- * highlight the search words provided in localstorage in the text
- */
- highlightSearchWords: () => {
- if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight
-
- // get and clear terms from localstorage
- const url = new URL(window.location);
- const highlight =
- localStorage.getItem("sphinx_highlight_terms")
- || url.searchParams.get("highlight")
- || "";
- localStorage.removeItem("sphinx_highlight_terms")
- url.searchParams.delete("highlight");
- window.history.replaceState({}, "", url);
-
- // get individual terms from highlight string
- const terms = highlight.toLowerCase().split(/\s+/).filter(x => x);
- if (terms.length === 0) return; // nothing to do
-
- // There should never be more than one element matching "div.body"
- const divBody = document.querySelectorAll("div.body");
- const body = divBody.length ? divBody[0] : document.querySelector("body");
- window.setTimeout(() => {
- terms.forEach((term) => _highlightText(body, term, "highlighted"));
- }, 10);
-
- const searchBox = document.getElementById("searchbox");
- if (searchBox === null) return;
- searchBox.appendChild(
- document
- .createRange()
- .createContextualFragment(
- '
' +
- '' +
- _("Hide Search Matches") +
- "
"
- )
- );
- },
-
- /**
- * helper function to hide the search marks again
- */
- hideSearchWords: () => {
- document
- .querySelectorAll("#searchbox .highlight-link")
- .forEach((el) => el.remove());
- document
- .querySelectorAll("span.highlighted")
- .forEach((el) => el.classList.remove("highlighted"));
- localStorage.removeItem("sphinx_highlight_terms")
- },
-
- initEscapeListener: () => {
- // only install a listener if it is really needed
- if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return;
-
- document.addEventListener("keydown", (event) => {
- // bail for input elements
- if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return;
- // bail with special keys
- if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;
- if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) {
- SphinxHighlight.hideSearchWords();
- event.preventDefault();
- }
- });
- },
-};
-
-_ready(() => {
- /* Do not call highlightSearchWords() when we are on the search page.
- * It will highlight words from the *previous* search query.
- */
- if (typeof Search === "undefined") SphinxHighlight.highlightSearchWords();
- SphinxHighlight.initEscapeListener();
-});
diff --git a/devel/html/genindex.html b/devel/html/genindex.html
deleted file mode 100644
index 17826b0..0000000
--- a/devel/html/genindex.html
+++ /dev/null
@@ -1,676 +0,0 @@
-
-
-
-
-
-
-
-
-
Index — EXRAIL Language documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- EXRAIL Language
-
-
-
-
-
-
-
-
-
-
Index
-
-
-
A
- |
B
- |
C
- |
D
- |
E
- |
F
- |
G
- |
H
- |
I
- |
J
- |
K
- |
L
- |
M
- |
N
- |
O
- |
P
- |
R
- |
S
- |
T
- |
U
- |
V
- |
W
- |
X
-
-
-
A
-
-
-
B
-
-
-
C
-
-
-
D
-
-
-
E
-
-
-
F
-
-
-
G
-
-
-
H
-
-
-
I
-
-
-
J
-
-
-
K
-
-
-
L
-
-
-
M
-
-
-
N
-
-
-
O
-
-
-
P
-
-
-
R
-
-
-
S
-
-
-
T
-
-
-
U
-
-
-
V
-
-
-
W
-
-
-
X
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/devel/html/index.html b/devel/html/index.html
deleted file mode 100644
index 59593fe..0000000
--- a/devel/html/index.html
+++ /dev/null
@@ -1,2428 +0,0 @@
-
-
-
-
-
-
-
-
-
-
EXRAIL Language documentation — EXRAIL Language documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- EXRAIL Language
-
-
-
-
-
-
-
-
-
-EXRAIL Language documentation
-
-Introduction
-EXRAIL - Extended Railroad Automation Instruction Language
-This page is a reference to all EXRAIL commands available with EX-CommandStation.
-
-
-Macros
-
-
Defines
-
-
-ACTIVATE ( addr , subaddr )
-Send DCC Accessory Activate packet (gate on then off)
-
-Parameters:
-
-
-
-
-
-
-
-ACTIVATEL ( longaddr )
-Send DCC Accessory Activate packet (gate on then off)
-
-Parameters:
-
-
-
-
-
-
-
-AFTER ( sensor_id , timer... )
-Wait for sensor activated, then decativated for given time.
-
-Parameters:
-
-
-
-
-
-
-
-AFTEROVERLOAD ( track_id )
-Wait for overload to be resolved.
-
-Parameters:
-
-
-
-
-
-
-
-ALIAS ( name , value... )
-defines a named numeric value.
-
-Parameters:
-
-
-
-
-
-
-
-AMBER ( signal_id )
-Sets a signal to amber state.
-
-Parameters:
-
-
-
-
-
-
-
-ANOUT ( vpin , value , param1 , param2 )
-Writes to the HAL analog output interface of a device driver. Values and meanings of extra parameters depend on driver.
-
-Parameters:
-
-vpin – Virtual pin number of device
-value – basic analog value
-param1 – device dependent
-param2 – device dependent
-
-
-
-
-
-
-
-AT ( sensor_id )
-wait intil a sensor becomes active
-
-Parameters:
-
-
-
-
-
-
-
-ASPECT ( address , value )
-Sends a DCC aspect value to an accessory address. May also change status of a signal defined using this aspect.
-
-Parameters:
-
-
-
-
-
-
-
-ATGTE ( sensor_id , value )
-Wait for analog sensor to be greater than given value.
-
-Parameters:
-
-
-
-
-
-
-
-ATLT ( sensor_id , value )
-Wait for analog sensor value to be less than given value.
-
-Parameters:
-
-
-
-
-
-
-
-ATTIMEOUT ( sensor_id , timeout_ms )
-Wait for sensor active, with timeout. Use IFTIMEOUT to determine whether the AT was satisfied.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-AUTOMATION ( id , description )
-Defies starting point of a sequence that will be shown as an Automation by the throttles. Automations are started by the throttle handing over a loco id to be driven.
-
-Parameters:
-
-
-
-
-
-
-
-AUTOSTART
-A new task will be created starting from this point at Command Station startup
-
-
-
-
-BLINK ( vpin , onDuty , offDuty )
-Starts a blinking process for a vpin (typically a LED) Stop blink with SET or RESET.
-
-Parameters:
-
-
-
-
-
-
-
-BROADCAST ( msg )
-Send raw message text to all throttles using the DCC-EX protocol.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-CALL ( route )
-transfer control to another sequence with expectation to return
-
-
-
-Parameters:
-
-
-
-
-
-
-
-CLEAR_STASH ( id )
-Clears loco stash value
-
-Parameters:
-
-
-
-
-
-
-
-CLEAR_ALL_STASH ( id )
-???????????????????????????????????????
-
-Parameters:
-
-
-
-
-
-
-
-CLOSE ( id )
-Close turnout by id.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-CONFIGURE_SERVO ( vpin , pos1 , pos2 , profile )
-setup servo movement parameters for non-turnout
-
-Parameters:
-
-vpin – must refer to a servo capable pin
-pos1 – SET position of servo
-pos2 – RESET position of servo
-profile – Movement profile (????????)
-
-
-
-
-
-
-
-DCC_SIGNAL ( id , add , subaddr )
-Define a DCC accessory signal with short address.
-
-Parameters:
-
-
-
-
-
-
-
-DCCX_SIGNAL ( id , redAspect , amberAspect , greenAspect )
-DEfine advanced DCC accessory signal with aspects.
-
-Parameters:
-
-
-
-
-
-
-
-DCC_TURNTABLE ( id , home , description... )
-??????????????????????????????????
-
-Parameters:
-
-id
-home
-description...
-
-
-
-
-
-
-
-DEACTIVATE ( addr , subaddr )
-Sends DCC Deactivate packet (gate on, gate off) to short address.
-
-Parameters:
-
-
-
-
-
-
-
-DEACTIVATEL ( addr )
-Sends DCC Deactivate packet (gate on, gate off) to long address.
-
-Parameters:
-
-
-
-
-
-
-
-DELAY ( mindelay )
-Waits for given milliseconds delay (This is not blocking)
-
-Parameters:
-
-
-
-
-
-
-
-DELAYMINS ( mindelay )
-Waits for given minutes delay (This is not blocking)
-
-Parameters:
-
-
-
-
-
-
-
-DELAYRANDOM ( mindelay , maxdelay )
-Waits for random delay between min and max milliseconds (This is not blocking)
-
-Parameters:
-
-mindelay – mS
-maxdelay – mS
-
-
-
-
-
-
-
-DONE
-Stops task loco (if any) and terminates current task.
-
-
-
-
-DRIVE ( analogpin )
-RESERVED do not use.
-
-Parameters:
-
-
-
-
-
-
-
-ELSE
-introduces alternate processing path after any kind of IF
-
-
-
-
-ENDEXRAIL
-Obsolete, has no effect.
-
-
-
-
-ENDIF
-determines end of IF(any type)
block. IF something ENDIF, or
-IF something ELSE something ENDIF
-
-
-
-
-
-ENDTASK
-same as DONE
-
-
-
-
-
-
-ESTOP
-Performs emergency stop on current task loco.
-
-
-
-
-EXRAIL
-OBSOLETE ignored.
-
-
-
-
-EXTT_TURNTABLE ( id , vpin , home , description... )
-??????????????????????
-
-Parameters:
-
-id
-vpin
-home
-description...
-
-
-
-
-
-
-
-FADE ( pin , value , ms )
-Modifies analog value slowly taking a given time.
-
-Parameters:
-
-pin
-value – new target value
-ms – time to reach value
-
-
-
-
-
-
-
-FOFF ( func )
-Turns off loco function for current loco.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-FOLLOW ( route )
-Task processing follows given route or sequence (Effectively a GoTo)
-
-Parameters:
-
-
-
-
-
-
-
-FON ( func )
-Turn on current loc finction.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-FORGET
-Removes current loco from task and DCC reminders table.
-
-
-
-
-FREE ( blockid )
-Frees logical token for given block.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-FTOGGLE ( func )
-Toggles function for current loco.
-
-Parameters:
-
-
-
-
-
-
-
-FWD ( speed )
-Instructs current loco to set DCC speed.
-
-Parameters:
-
-speed – 0..127 (1=ESTOP)
-
-
-
-
-
-
-
-GREEN ( signal_id )
-Sets signal to green state.
-
-Parameters:
-
-
-
-
-
-
-
-HAL ( haltype , params... )
-Defines VPIN mapping for specific hardware drivers.
-
-Parameters:
-
-
-
-
-
-
-
-HAL_IGNORE_DEFAULTS
-System will ignore default HAL settings.
-
-
-
-
-IF ( sensor_id )
-Checks sensor state, If false jumps to matching nested ELSE or ENDIF.
-
-Parameters:
-
-
-
-
-
-
-
-IFAMBER ( signal_id )
-Checks if signal is in AMBER state.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFCLOSED ( turnout_id )
-Checks if given turnout is in close state.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFGREEN ( signal_id )
-Checks if given signal is in GREEN state.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFGTE ( sensor_id , value )
-Checks if analog sensor >= value.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFLOCO ( loco_id )
-Checks if current task loco = loco_id.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFLT ( sensor_id , value )
-Checks if analog sensor < value.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFNOT ( sensor_id )
-Inverse of IF.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFRANDOM ( percent )
-randomly satisfield IF at given percent probability
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFRED ( signal_id )
-Checks if given signal is in RED state.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFTHROWN ( turnout_id )
-Checks if given turnout is in THROWN state.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFRESERVE ( block )
-Agttempts to reserve block token and if satisfiled the block remains reserved.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-IFTIMEOUT
-Checks TIMEOUT state after an AT/AFTER request with timeout value.
-
-
-
-
-
-
-IFTTPOSITION ( turntable_id , position )
-Checks if GTurntable is in given position.
-
-
-
-Parameters:
-
-turntable_id
-position
-
-
-
-
-
-
-
-IFRE ( sensor_id , value )
-????????????????????????????????????????
-
-Parameters:
-
-
-
-
-
-
-
-INVERT_DIRECTION
-Marks current task so that FWD and REV commands are inverted.
-
-
-
-
-JMRI_SENSOR ( vpin , count... )
-DEfines multiple JMRI
-
-Parameters:
-
-
-
-
-
-
-
-JOIN
-Switches PROG track to receive MAIN track DCC packets. (Drive on PROG track)
-
-
-
-
-KILLALL
-Tertminates all running EXRAIL tasks.
-
-
-
-
-LATCH ( sensor_id )
-Make all AT/AFTER/IF see sensor active without checking hardware.
-
-Parameters:
-
-
-
-
-
-
-
-LCC ( eventid )
-Issue event to LCC.
-
-Parameters:
-
-
-
-
-
-
-
-LCCX ( senderid , eventid )
-Issue LCC event while impersonating another sender.
-
-Parameters:
-
-
-
-
-
-
-
-LCD ( row , msg )
-Write message on row of default configured LCD/OLED.
-
-
-
-Parameters:
-
-row
-msg – Quoted text
-
-
-
-
-
-
-
-SCREEN ( display , row , msg )
-Send message to external display hadlers.
-
-Parameters:
-
-
-
-
-
-
-
-LCN ( msg )
-??????
-
-Parameters:
-
-
-
-
-
-
-
-MESSAGE ( msg )
-Send a human readable message to all throttle users.
-
-Parameters:
-
-
-
-
-
-
-
-MOVETT ( id , steps , activity )
-???????????????????
-
-Parameters:
-
-
-
-
-
-
-
-NEOPIXEL ( id , r , g , b , count... )
-Set a NEOPIXEL vpin to a given red/green/blue colour.
-
-Parameters:
-
-
-
-
-
-
-
-NEOPIXEL_SIGNAL ( sigid , redcolour , ambercolour , greencolour )
-Define a signal that uses a single multi colour pixel.
-
-Parameters:
-
-
-
-
-
-
-
-ACON ( eventid )
-Send MERG CBUS ACON to Adapter.
-
-Parameters:
-
-
-
-
-
-
-
-ACOF ( eventid )
-Send MERG CBUS ACOF to Adapter.
-
-Parameters:
-
-
-
-
-
-
-
-ONACON ( eventid )
-Start task here when ACON for event receied from MERG CBUS.
-
-Parameters:
-
-
-
-
-
-
-
-ONACOF ( eventid )
-Start task here when ACOF for event receied from MERG CBUS.
-
-Parameters:
-
-
-
-
-
-
-
-ONACTIVATE ( addr , subaddr )
-Start task here when DCC Activate sent for short address.
-
-Parameters:
-
-
-
-
-
-
-
-ONACTIVATEL ( linear )
-Start task here when DCC Activate sent for long address.
-
-Parameters:
-
-
-
-
-
-
-
-ONAMBER ( signal_id )
-Start task here when signal set to AMBER state.
-
-Parameters:
-
-
-
-
-
-
-
-ONTIME ( value )
-Start task here when fastclock mins in day=value.
-
-Parameters:
-
-
-
-
-
-
-
-ONCLOCKTIME ( hours , mins )
-Start task here when fastclock matches time.
-
-Parameters:
-
-
-
-
-
-
-
-ONCLOCKMINS ( mins )
-Start task here hourly when fastclock minutes matches.
-
-Parameters:
-
-
-
-
-
-
-
-ONOVERLOAD ( track_id )
-Start task here when given track goes into overload.
-
-Parameters:
-
-
-
-
-
-
-
-ONDEACTIVATE ( addr , subaddr )
-Start task here when DCC deactivate packet sent.
-
-Parameters:
-
-
-
-
-
-
-
-ONDEACTIVATEL ( linear )
-Start task here when DCC deactivate sent to linear address.
-
-Parameters:
-
-
-
-
-
-
-
-ONCLOSE ( turnout_id )
-Start task here when turnout closed.
-
-Parameters:
-
-
-
-
-
-
-
-ONLCC ( sender , event )
-??????????????????
-
-Parameters:
-
-
-
-
-
-
-
-ONGREEN ( signal_id )
-Start task here when signal set to GREEN state.
-
-Parameters:
-
-
-
-
-
-
-
-ONRED ( signal_id )
-Start task here when signal set to RED state.
-
-Parameters:
-
-
-
-
-
-
-
-ONROTATE ( turntable_id )
-Start task here when turntable is rotated.
-
-Parameters:
-
-
-
-
-
-
-
-ONTHROW ( turnout_id )
-Start task here when turnout is Thrown.
-
-Parameters:
-
-
-
-
-
-
-
-ONCHANGE ( sensor_id )
-???????????????????
-
-Parameters:
-
-
-
-
-
-
-
-ONSENSOR ( sensor_id )
-Start task here when sensor changes state (debounced)
-
-Parameters:
-
-
-
-
-
-
-
-ONBUTTON ( sensor_id )
-Start task here when sensor changes HIGH to LOW.
-
-Parameters:
-
-
-
-
-
-
-
-PAUSE
-Pauses all EXRAIL tasks except the curremnt one. Other tasks ESTOP their locos until RESUME issued.
-
-
-
-
-PIN_TURNOUT ( id , pin , description... )
-Defines a tirnout which operates on a signle pin.
-
-Parameters:
-
-
-
-
-
-
-
-PRINT ( msg )
-prints diagnostic message on USB serial
-
-Parameters:
-
-
-
-
-
-
-
-PARSE ( msg )
-Executes <> command as if entered from serial.
-
-Parameters:
-
-
-
-
-
-
-
-PICKUP_STASH ( id )
-Loads stashed value into current task loco.
-
-Parameters:
-
-
-
-
-
-
-
-POM ( cv , value )
-Write value to cv on current tasks loco (Program on Main)
-
-Parameters:
-
-
-
-
-
-
-
-POWEROFF
-Powers off all tracks.
-
-
-
-
-POWERON
-Powers ON all tracks.
-
-
-
-
-READ_LOCO
-Reads loco Id from prog traqck and sets currenmt task loco id.
-
-
-
-
-RED ( signal_id )
-sets signal to RED state
-
-Parameters:
-
-
-
-
-
-
-
-RESERVE ( blockid )
-Waits for token for block. If not available immediately, current task loco is stopped.
-
-Parameters:
-
-
-
-
-
-
-
-RESET ( pin , count... )
-Sets output puin LOW.
-
-Parameters:
-
-
-
-
-
-
-
-RESUME
-Resumes PAUSEd tasks.
-
-
-
-
-
-
-RETURN
-Returns to CALL.
-
-
-
-
-
-
-REV ( speed )
-Issues DCC speed packet for current loco in reverse.
-
-
-
-Parameters:
-
-
-
-
-
-
-
-ROTATE ( turntable_id , position , activity )
-????
-
-Parameters:
-
-turntable_id
-position
-activity
-
-
-
-
-
-
-
-ROTATE_DCC ( turntable_id , position )
-????
-
-Parameters:
-
-turntable_id
-position
-
-
-
-
-
-
-
-ROSTER ( cab , name , funcmap... )
-Describes a loco roster entry visible to throttles.
-
-Parameters:
-
-cab – loco DCC address or 0 for default entry
-name – Quoted text
-funcmap... – Quoted text, optional list of function names separated by / character with momentary fuinctin names prefixed with an *.
-
-
-
-
-
-
-
-ROUTE ( id , description )
-DEfines starting point of a sequence that will appear as a route on throttle buttons.
-
-Parameters:
-
-
-
-
-
-
-
-ROUTE_ACTIVE ( id )
-Tells throttle to display the route button as active.
-
-Parameters:
-
-
-
-
-
-
-
-ROUTE_INACTIVE ( id )
-Tells throttle to display the route button as inactive.
-
-Parameters:
-
-
-
-
-
-
-
-ROUTE_HIDDEN ( id )
-Tells throttle to hide the route button.
-
-Parameters:
-
-
-
-
-
-
-
-ROUTE_DISABLED ( id )
-Tells throttle to display the route button as disabled.
-
-Parameters:
-
-
-
-
-
-
-
-ROUTE_CAPTION ( id , caption )
-Tells throttle to change thr route button caption.
-
-Parameters:
-
-
-
-
-
-
-
-SENDLOCO ( cab , route )
-Start a new task to drive the loco.
-
-Parameters:
-
-
-
-
-
-
-
-SEQUENCE ( id )
-Provides a unique label than can be used to call, follow or start.
-
-
-
-
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL ( msg )
-Write direct to Serial output.
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL1 ( msg )
-Write direct to Serial1 output.
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL2 ( msg )
-Write direct to Serial2 output.
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL3 ( msg )
-Write direct to Serial3 output.
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL4 ( msg )
-Write direct to Serial4 output.
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL5 ( msg )
-Write direct to Serial5 output.
-
-Parameters:
-
-
-
-
-
-
-
-SERIAL6 ( msg )
-Write direct to Serial6 output.
-
-Parameters:
-
-
-
-
-
-
-
-SERVO ( id , position , profile )
-Move servo to given position.
-
-Parameters:
-
-
-
-
-
-
-
-SERVO2 ( id , position , duration )
-Move servo to given position taking time.
-
-Parameters:
-
-id
-position
-duration – mS
-
-
-
-
-
-
-
-SERVO_SIGNAL ( vpin , redpos , amberpos , greenpos )
-Dedfine a servo based signal with 3 servo positions.
-
-Parameters:
-
-vpin
-redpos
-amberpos
-greenpos
-
-
-
-
-
-
-
-SERVO_TURNOUT ( id , pin , activeAngle , inactiveAngle , profile , description... )
-Define a servo driven turnout.
-
-Parameters:
-
-
-
-
-
-
-
-SET ( pin , count... )
-Set VPIN HIGH
-
-Parameters:
-
-
-
-
-
-
-
-SET_TRACK ( track , mode )
-Set output track type.
-
-Parameters:
-
-track – A..H
-mode – ???names???
-
-
-
-
-
-
-
-SET_POWER ( track , onoff )
-Set track power mode.
-
-Parameters:
-
-track – A..H
-onoff – ??? values ???
-
-
-
-
-
-
-
-SETLOCO ( loco )
-Sets the loco being handled by the current task.
-
-Parameters:
-
-
-
-
-
-
-
-SETFREQ ( freq )
-Sets the DC track PWM frequency.
-
-Parameters:
-
-
-
-
-
-
-
-SIGNAL ( redpin , amberpin , greenpin )
-Define a Signal with LOW=on leds (is that common annode???)
-
-
-
-Parameters:
-
-redpin
-amberpin
-greenpin
-
-
-
-
-
-
-
-SIGNALH ( redpin , amberpin , greenpin )
-define a signal with HIGH=ON leds
-
-Parameters:
-
-redpin
-amberpin
-greenpin
-
-
-
-
-
-
-
-SPEED ( speed )
-Changes current tasks loco speed without changing direction.
-
-Parameters:
-
-speed – 0..127 (1=ESTOP)
-
-
-
-
-
-
-
-START ( route )
-Starts a new task at the given route/animation/sequence.
-
-Parameters:
-
-
-
-
-
-
-
-STASH ( id )
-saves cuttent tasks loco id in the stash array
-
-Parameters:
-
-
-
-
-
-
-
-STEALTH ( code... )
-Allows for embedding raw C++ code in context of current task.
-
-Parameters:
-
-
-
-
-
-
-
-STEALTH_GLOBAL ( code... )
-Allows for embedding raw c++ code out of context.
-
-Parameters:
-
-
-
-
-
-
-
-STOP
-Same as SPEED(0)
-
-
-
-
-THROW ( id )
-Throws given turnout.
-
-Parameters:
-
-
-
-
-
-
-
-TOGGLE_TURNOUT ( id )
-Toggles given turnout.
-
-Parameters:
-
-
-
-
-
-
-
-TT_ADDPOSITION ( turntable_id , position , value , angle , description... )
-Defines a turntable track position.
-
-Parameters:
-
-turntable_id
-position – ??????????
-value
-angle
-description...
-
-
-
-
-
-
-
-TURNOUT ( id , addr , subaddr , description... )
-Defines a DCC accessory turnout with legacy address.
-
-Parameters:
-
-
-
-
-
-
-
-TURNOUTL ( id , addr , description... )
-Defines a DCC accessory turnout with inear address.
-
-param id
-
-Param :
-
-Parameters:
-
-
-
-
-
-
-
-UNJOIN
-Disconnects PROG track from MAIN.
-
-
-
-
-
-
-UNLATCH ( sensor_id )
-removes latched on flag
-
-
-
-Parameters:
-
-
-
-
-
-
-
-VIRTUAL_SIGNAL ( id )
-Defines a virtual (no hardware) signal.
-
-Parameters:
-
-
-
-
-
-
-
-VIRTUAL_TURNOUT ( id , description... )
-Defines a virtual (no hardware) turnout.
-
-Parameters:
-
-
-
-
-
-
-
-WAITFOR ( pin )
-???????????????????
-
-Parameters:
-
-
-
-
-
-
-
-WAITFORTT ( turntable_id )
-
-Parameters:
-
-
-
-
-
-
-
-WITHROTTLE ( msg )
-Broadcasts a string in Withrottle protocol format to all throttles using this protocol.
-
-Parameters:
-
-
-
-
-
-
-
-XFOFF ( cab , func )
-Turns function off for given loco.
-
-Parameters:
-
-
-
-
-
-
-
-XFON ( cab , func )
-Turns function ON for given loco.
-
-Parameters:
-
-
-
-
-
-
-
-XFTOGGLE ( cab , func )
-Toggles function state for given loco.
-
-Parameters:
-
-
-
-
-
-
-
-XFWD ( cab , speed )
-Sends DCC speed to loco in forward direction.
-
-Parameters:
-
-
-
-
-
-
-
-XREV ( cab , speed )
-Sends DCC speed to loco in reverse direction.
-
-Parameters:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/devel/html/objects.inv b/devel/html/objects.inv
deleted file mode 100644
index 389fb74..0000000
Binary files a/devel/html/objects.inv and /dev/null differ
diff --git a/devel/html/robots.txt b/devel/html/robots.txt
deleted file mode 100644
index fa4a648..0000000
--- a/devel/html/robots.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-User-agent: *
-
-Sitemap: https://dcc-ex.com/CommandStation-EX/sitemap.xml
diff --git a/devel/html/search.html b/devel/html/search.html
deleted file mode 100644
index 746c21f..0000000
--- a/devel/html/search.html
+++ /dev/null
@@ -1,153 +0,0 @@
-
-
-
-
-
-
-
-
-
Search — EXRAIL Language documentation
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- EXRAIL Language
-
-
-
-
-
-
-
-
-
-
-
- Please activate JavaScript to enable the search functionality.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/devel/html/searchindex.js b/devel/html/searchindex.js
deleted file mode 100644
index f578b72..0000000
--- a/devel/html/searchindex.js
+++ /dev/null
@@ -1 +0,0 @@
-Search.setIndex({"alltitles": {"EXRAIL Language documentation": [[0, null]], "Introduction": [[0, "introduction"]], "Macros": [[0, "macros"]]}, "docnames": ["index"], "envversion": {"sphinx": 64, "sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2}, "filenames": ["index.rst"], "indexentries": {"acof (c macro)": [[0, "c.ACOF", false]], "acon (c macro)": [[0, "c.ACON", false]], "activate (c macro)": [[0, "c.ACTIVATE", false]], "activatel (c macro)": [[0, "c.ACTIVATEL", false]], "after (c macro)": [[0, "c.AFTER", false]], "afteroverload (c macro)": [[0, "c.AFTEROVERLOAD", false]], "alias (c macro)": [[0, "c.ALIAS", false]], "amber (c macro)": [[0, "c.AMBER", false]], "anout (c macro)": [[0, "c.ANOUT", false]], "aspect (c macro)": [[0, "c.ASPECT", false]], "at (c macro)": [[0, "c.AT", false]], "atgte (c macro)": [[0, "c.ATGTE", false]], "atlt (c macro)": [[0, "c.ATLT", false]], "attimeout (c macro)": [[0, "c.ATTIMEOUT", false]], "automation (c macro)": [[0, "c.AUTOMATION", false]], "autostart (c macro)": [[0, "c.AUTOSTART", false]], "blink (c macro)": [[0, "c.BLINK", false]], "broadcast (c macro)": [[0, "c.BROADCAST", false]], "call (c macro)": [[0, "c.CALL", false]], "clear_all_stash (c macro)": [[0, "c.CLEAR_ALL_STASH", false]], "clear_stash (c macro)": [[0, "c.CLEAR_STASH", false]], "close (c macro)": [[0, "c.CLOSE", false]], "configure_servo (c macro)": [[0, "c.CONFIGURE_SERVO", false]], "dcc_signal (c macro)": [[0, "c.DCC_SIGNAL", false]], "dcc_turntable (c macro)": [[0, "c.DCC_TURNTABLE", false]], "dccx_signal (c macro)": [[0, "c.DCCX_SIGNAL", false]], "deactivate (c macro)": [[0, "c.DEACTIVATE", false]], "deactivatel (c macro)": [[0, "c.DEACTIVATEL", false]], "delay (c macro)": [[0, "c.DELAY", false]], "delaymins (c macro)": [[0, "c.DELAYMINS", false]], "delayrandom (c macro)": [[0, "c.DELAYRANDOM", false]], "done (c macro)": [[0, "c.DONE", false]], "drive (c macro)": [[0, "c.DRIVE", false]], "else (c macro)": [[0, "c.ELSE", false]], "endexrail (c macro)": [[0, "c.ENDEXRAIL", false]], "endif (c macro)": [[0, "c.ENDIF", false]], "endtask (c macro)": [[0, "c.ENDTASK", false]], "estop (c macro)": [[0, "c.ESTOP", false]], "exrail (c macro)": [[0, "c.EXRAIL", false]], "extt_turntable (c macro)": [[0, "c.EXTT_TURNTABLE", false]], "fade (c macro)": [[0, "c.FADE", false]], "foff (c macro)": [[0, "c.FOFF", false]], "follow (c macro)": [[0, "c.FOLLOW", false]], "fon (c macro)": [[0, "c.FON", false]], "forget (c macro)": [[0, "c.FORGET", false]], "free (c macro)": [[0, "c.FREE", false]], "ftoggle (c macro)": [[0, "c.FTOGGLE", false]], "fwd (c macro)": [[0, "c.FWD", false]], "green (c macro)": [[0, "c.GREEN", false]], "hal (c macro)": [[0, "c.HAL", false]], "hal_ignore_defaults (c macro)": [[0, "c.HAL_IGNORE_DEFAULTS", false]], "if (c macro)": [[0, "c.IF", false]], "ifamber (c macro)": [[0, "c.IFAMBER", false]], "ifclosed (c macro)": [[0, "c.IFCLOSED", false]], "ifgreen (c macro)": [[0, "c.IFGREEN", false]], "ifgte (c macro)": [[0, "c.IFGTE", false]], "ifloco (c macro)": [[0, "c.IFLOCO", false]], "iflt (c macro)": [[0, "c.IFLT", false]], "ifnot (c macro)": [[0, "c.IFNOT", false]], "ifrandom (c macro)": [[0, "c.IFRANDOM", false]], "ifre (c macro)": [[0, "c.IFRE", false]], "ifred (c macro)": [[0, "c.IFRED", false]], "ifreserve (c macro)": [[0, "c.IFRESERVE", false]], "ifthrown (c macro)": [[0, "c.IFTHROWN", false]], "iftimeout (c macro)": [[0, "c.IFTIMEOUT", false]], "ifttposition (c macro)": [[0, "c.IFTTPOSITION", false]], "invert_direction (c macro)": [[0, "c.INVERT_DIRECTION", false]], "jmri_sensor (c macro)": [[0, "c.JMRI_SENSOR", false]], "join (c macro)": [[0, "c.JOIN", false]], "killall (c macro)": [[0, "c.KILLALL", false]], "latch (c macro)": [[0, "c.LATCH", false]], "lcc (c macro)": [[0, "c.LCC", false]], "lccx (c macro)": [[0, "c.LCCX", false]], "lcd (c macro)": [[0, "c.LCD", false]], "lcn (c macro)": [[0, "c.LCN", false]], "message (c macro)": [[0, "c.MESSAGE", false]], "movett (c macro)": [[0, "c.MOVETT", false]], "neopixel (c macro)": [[0, "c.NEOPIXEL", false]], "neopixel_signal (c macro)": [[0, "c.NEOPIXEL_SIGNAL", false]], "onacof (c macro)": [[0, "c.ONACOF", false]], "onacon (c macro)": [[0, "c.ONACON", false]], "onactivate (c macro)": [[0, "c.ONACTIVATE", false]], "onactivatel (c macro)": [[0, "c.ONACTIVATEL", false]], "onamber (c macro)": [[0, "c.ONAMBER", false]], "onbutton (c macro)": [[0, "c.ONBUTTON", false]], "onchange (c macro)": [[0, "c.ONCHANGE", false]], "onclockmins (c macro)": [[0, "c.ONCLOCKMINS", false]], "onclocktime (c macro)": [[0, "c.ONCLOCKTIME", false]], "onclose (c macro)": [[0, "c.ONCLOSE", false]], "ondeactivate (c macro)": [[0, "c.ONDEACTIVATE", false]], "ondeactivatel (c macro)": [[0, "c.ONDEACTIVATEL", false]], "ongreen (c macro)": [[0, "c.ONGREEN", false]], "onlcc (c macro)": [[0, "c.ONLCC", false]], "onoverload (c macro)": [[0, "c.ONOVERLOAD", false]], "onred (c macro)": [[0, "c.ONRED", false]], "onrotate (c macro)": [[0, "c.ONROTATE", false]], "onsensor (c macro)": [[0, "c.ONSENSOR", false]], "onthrow (c macro)": [[0, "c.ONTHROW", false]], "ontime (c macro)": [[0, "c.ONTIME", false]], "parse (c macro)": [[0, "c.PARSE", false]], "pause (c macro)": [[0, "c.PAUSE", false]], "pickup_stash (c macro)": [[0, "c.PICKUP_STASH", false]], "pin_turnout (c macro)": [[0, "c.PIN_TURNOUT", false]], "pom (c macro)": [[0, "c.POM", false]], "poweroff (c macro)": [[0, "c.POWEROFF", false]], "poweron (c macro)": [[0, "c.POWERON", false]], "print (c macro)": [[0, "c.PRINT", false]], "read_loco (c macro)": [[0, "c.READ_LOCO", false]], "red (c macro)": [[0, "c.RED", false]], "reserve (c macro)": [[0, "c.RESERVE", false]], "reset (c macro)": [[0, "c.RESET", false]], "resume (c macro)": [[0, "c.RESUME", false]], "return (c macro)": [[0, "c.RETURN", false]], "rev (c macro)": [[0, "c.REV", false]], "roster (c macro)": [[0, "c.ROSTER", false]], "rotate (c macro)": [[0, "c.ROTATE", false]], "rotate_dcc (c macro)": [[0, "c.ROTATE_DCC", false]], "route (c macro)": [[0, "c.ROUTE", false]], "route_active (c macro)": [[0, "c.ROUTE_ACTIVE", false]], "route_caption (c macro)": [[0, "c.ROUTE_CAPTION", false]], "route_disabled (c macro)": [[0, "c.ROUTE_DISABLED", false]], "route_hidden (c macro)": [[0, "c.ROUTE_HIDDEN", false]], "route_inactive (c macro)": [[0, "c.ROUTE_INACTIVE", false]], "screen (c macro)": [[0, "c.SCREEN", false]], "sendloco (c macro)": [[0, "c.SENDLOCO", false]], "sequence (c macro)": [[0, "c.SEQUENCE", false]], "serial (c macro)": [[0, "c.SERIAL", false]], "serial1 (c macro)": [[0, "c.SERIAL1", false]], "serial2 (c macro)": [[0, "c.SERIAL2", false]], "serial3 (c macro)": [[0, "c.SERIAL3", false]], "serial4 (c macro)": [[0, "c.SERIAL4", false]], "serial5 (c macro)": [[0, "c.SERIAL5", false]], "serial6 (c macro)": [[0, "c.SERIAL6", false]], "servo (c macro)": [[0, "c.SERVO", false]], "servo2 (c macro)": [[0, "c.SERVO2", false]], "servo_signal (c macro)": [[0, "c.SERVO_SIGNAL", false]], "servo_turnout (c macro)": [[0, "c.SERVO_TURNOUT", false]], "set (c macro)": [[0, "c.SET", false]], "set_power (c macro)": [[0, "c.SET_POWER", false]], "set_track (c macro)": [[0, "c.SET_TRACK", false]], "setfreq (c macro)": [[0, "c.SETFREQ", false]], "setloco (c macro)": [[0, "c.SETLOCO", false]], "signal (c macro)": [[0, "c.SIGNAL", false]], "signalh (c macro)": [[0, "c.SIGNALH", false]], "speed (c macro)": [[0, "c.SPEED", false]], "start (c macro)": [[0, "c.START", false]], "stash (c macro)": [[0, "c.STASH", false]], "stealth (c macro)": [[0, "c.STEALTH", false]], "stealth_global (c macro)": [[0, "c.STEALTH_GLOBAL", false]], "stop (c macro)": [[0, "c.STOP", false]], "throw (c macro)": [[0, "c.THROW", false]], "toggle_turnout (c macro)": [[0, "c.TOGGLE_TURNOUT", false]], "tt_addposition (c macro)": [[0, "c.TT_ADDPOSITION", false]], "turnout (c macro)": [[0, "c.TURNOUT", false]], "turnoutl (c macro)": [[0, "c.TURNOUTL", false]], "unjoin (c macro)": [[0, "c.UNJOIN", false]], "unlatch (c macro)": [[0, "c.UNLATCH", false]], "virtual_signal (c macro)": [[0, "c.VIRTUAL_SIGNAL", false]], "virtual_turnout (c macro)": [[0, "c.VIRTUAL_TURNOUT", false]], "waitfor (c macro)": [[0, "c.WAITFOR", false]], "waitfortt (c macro)": [[0, "c.WAITFORTT", false]], "withrottle (c macro)": [[0, "c.WITHROTTLE", false]], "xfoff (c macro)": [[0, "c.XFOFF", false]], "xfon (c macro)": [[0, "c.XFON", false]], "xftoggle (c macro)": [[0, "c.XFTOGGLE", false]], "xfwd (c macro)": [[0, "c.XFWD", false]], "xrev (c macro)": [[0, "c.XREV", false]]}, "objects": {"": [[0, 0, 1, "c.ACOF", "ACOF"], [0, 0, 1, "c.ACON", "ACON"], [0, 0, 1, "c.ACTIVATE", "ACTIVATE"], [0, 0, 1, "c.ACTIVATEL", "ACTIVATEL"], [0, 0, 1, "c.AFTER", "AFTER"], [0, 0, 1, "c.AFTEROVERLOAD", "AFTEROVERLOAD"], [0, 0, 1, "c.ALIAS", "ALIAS"], [0, 0, 1, "c.AMBER", "AMBER"], [0, 0, 1, "c.ANOUT", "ANOUT"], [0, 0, 1, "c.ASPECT", "ASPECT"], [0, 0, 1, "c.AT", "AT"], [0, 0, 1, "c.ATGTE", "ATGTE"], [0, 0, 1, "c.ATLT", "ATLT"], [0, 0, 1, "c.ATTIMEOUT", "ATTIMEOUT"], [0, 0, 1, "c.AUTOMATION", "AUTOMATION"], [0, 0, 1, "c.AUTOSTART", "AUTOSTART"], [0, 0, 1, "c.BLINK", "BLINK"], [0, 0, 1, "c.BROADCAST", "BROADCAST"], [0, 0, 1, "c.CALL", "CALL"], [0, 0, 1, "c.CLEAR_ALL_STASH", "CLEAR_ALL_STASH"], [0, 0, 1, "c.CLEAR_STASH", "CLEAR_STASH"], [0, 0, 1, "c.CLOSE", "CLOSE"], [0, 0, 1, "c.CONFIGURE_SERVO", "CONFIGURE_SERVO"], [0, 0, 1, "c.DCCX_SIGNAL", "DCCX_SIGNAL"], [0, 0, 1, "c.DCC_SIGNAL", "DCC_SIGNAL"], [0, 0, 1, "c.DCC_TURNTABLE", "DCC_TURNTABLE"], [0, 0, 1, "c.DEACTIVATE", "DEACTIVATE"], [0, 0, 1, "c.DEACTIVATEL", "DEACTIVATEL"], [0, 0, 1, "c.DELAY", "DELAY"], [0, 0, 1, "c.DELAYMINS", "DELAYMINS"], [0, 0, 1, "c.DELAYRANDOM", "DELAYRANDOM"], [0, 0, 1, "c.DONE", "DONE"], [0, 0, 1, "c.DRIVE", "DRIVE"], [0, 0, 1, "c.ELSE", "ELSE"], [0, 0, 1, "c.ENDEXRAIL", "ENDEXRAIL"], [0, 0, 1, "c.ENDIF", "ENDIF"], [0, 0, 1, "c.ENDTASK", "ENDTASK"], [0, 0, 1, "c.ESTOP", "ESTOP"], [0, 0, 1, "c.EXRAIL", "EXRAIL"], [0, 0, 1, "c.EXTT_TURNTABLE", "EXTT_TURNTABLE"], [0, 0, 1, "c.FADE", "FADE"], [0, 0, 1, "c.FOFF", "FOFF"], [0, 0, 1, "c.FOLLOW", "FOLLOW"], [0, 0, 1, "c.FON", "FON"], [0, 0, 1, "c.FORGET", "FORGET"], [0, 0, 1, "c.FREE", "FREE"], [0, 0, 1, "c.FTOGGLE", "FTOGGLE"], [0, 0, 1, "c.FWD", "FWD"], [0, 0, 1, "c.GREEN", "GREEN"], [0, 0, 1, "c.HAL", "HAL"], [0, 0, 1, "c.HAL_IGNORE_DEFAULTS", "HAL_IGNORE_DEFAULTS"], [0, 0, 1, "c.IF", "IF"], [0, 0, 1, "c.IFAMBER", "IFAMBER"], [0, 0, 1, "c.IFCLOSED", "IFCLOSED"], [0, 0, 1, "c.IFGREEN", "IFGREEN"], [0, 0, 1, "c.IFGTE", "IFGTE"], [0, 0, 1, "c.IFLOCO", "IFLOCO"], [0, 0, 1, "c.IFLT", "IFLT"], [0, 0, 1, "c.IFNOT", "IFNOT"], [0, 0, 1, "c.IFRANDOM", "IFRANDOM"], [0, 0, 1, "c.IFRE", "IFRE"], [0, 0, 1, "c.IFRED", "IFRED"], [0, 0, 1, "c.IFRESERVE", "IFRESERVE"], [0, 0, 1, "c.IFTHROWN", "IFTHROWN"], [0, 0, 1, "c.IFTIMEOUT", "IFTIMEOUT"], [0, 0, 1, "c.IFTTPOSITION", "IFTTPOSITION"], [0, 0, 1, "c.INVERT_DIRECTION", "INVERT_DIRECTION"], [0, 0, 1, "c.JMRI_SENSOR", "JMRI_SENSOR"], [0, 0, 1, "c.JOIN", "JOIN"], [0, 0, 1, "c.KILLALL", "KILLALL"], [0, 0, 1, "c.LATCH", "LATCH"], [0, 0, 1, "c.LCC", "LCC"], [0, 0, 1, "c.LCCX", "LCCX"], [0, 0, 1, "c.LCD", "LCD"], [0, 0, 1, "c.LCN", "LCN"], [0, 0, 1, "c.MESSAGE", "MESSAGE"], [0, 0, 1, "c.MOVETT", "MOVETT"], [0, 0, 1, "c.NEOPIXEL", "NEOPIXEL"], [0, 0, 1, "c.NEOPIXEL_SIGNAL", "NEOPIXEL_SIGNAL"], [0, 0, 1, "c.ONACOF", "ONACOF"], [0, 0, 1, "c.ONACON", "ONACON"], [0, 0, 1, "c.ONACTIVATE", "ONACTIVATE"], [0, 0, 1, "c.ONACTIVATEL", "ONACTIVATEL"], [0, 0, 1, "c.ONAMBER", "ONAMBER"], [0, 0, 1, "c.ONBUTTON", "ONBUTTON"], [0, 0, 1, "c.ONCHANGE", "ONCHANGE"], [0, 0, 1, "c.ONCLOCKMINS", "ONCLOCKMINS"], [0, 0, 1, "c.ONCLOCKTIME", "ONCLOCKTIME"], [0, 0, 1, "c.ONCLOSE", "ONCLOSE"], [0, 0, 1, "c.ONDEACTIVATE", "ONDEACTIVATE"], [0, 0, 1, "c.ONDEACTIVATEL", "ONDEACTIVATEL"], [0, 0, 1, "c.ONGREEN", "ONGREEN"], [0, 0, 1, "c.ONLCC", "ONLCC"], [0, 0, 1, "c.ONOVERLOAD", "ONOVERLOAD"], [0, 0, 1, "c.ONRED", "ONRED"], [0, 0, 1, "c.ONROTATE", "ONROTATE"], [0, 0, 1, "c.ONSENSOR", "ONSENSOR"], [0, 0, 1, "c.ONTHROW", "ONTHROW"], [0, 0, 1, "c.ONTIME", "ONTIME"], [0, 0, 1, "c.PARSE", "PARSE"], [0, 0, 1, "c.PAUSE", "PAUSE"], [0, 0, 1, "c.PICKUP_STASH", "PICKUP_STASH"], [0, 0, 1, "c.PIN_TURNOUT", "PIN_TURNOUT"], [0, 0, 1, "c.POM", "POM"], [0, 0, 1, "c.POWEROFF", "POWEROFF"], [0, 0, 1, "c.POWERON", "POWERON"], [0, 0, 1, "c.PRINT", "PRINT"], [0, 0, 1, "c.READ_LOCO", "READ_LOCO"], [0, 0, 1, "c.RED", "RED"], [0, 0, 1, "c.RESERVE", "RESERVE"], [0, 0, 1, "c.RESET", "RESET"], [0, 0, 1, "c.RESUME", "RESUME"], [0, 0, 1, "c.RETURN", "RETURN"], [0, 0, 1, "c.REV", "REV"], [0, 0, 1, "c.ROSTER", "ROSTER"], [0, 0, 1, "c.ROTATE", "ROTATE"], [0, 0, 1, "c.ROTATE_DCC", "ROTATE_DCC"], [0, 0, 1, "c.ROUTE", "ROUTE"], [0, 0, 1, "c.ROUTE_ACTIVE", "ROUTE_ACTIVE"], [0, 0, 1, "c.ROUTE_CAPTION", "ROUTE_CAPTION"], [0, 0, 1, "c.ROUTE_DISABLED", "ROUTE_DISABLED"], [0, 0, 1, "c.ROUTE_HIDDEN", "ROUTE_HIDDEN"], [0, 0, 1, "c.ROUTE_INACTIVE", "ROUTE_INACTIVE"], [0, 0, 1, "c.SCREEN", "SCREEN"], [0, 0, 1, "c.SENDLOCO", "SENDLOCO"], [0, 0, 1, "c.SEQUENCE", "SEQUENCE"], [0, 0, 1, "c.SERIAL", "SERIAL"], [0, 0, 1, "c.SERIAL1", "SERIAL1"], [0, 0, 1, "c.SERIAL2", "SERIAL2"], [0, 0, 1, "c.SERIAL3", "SERIAL3"], [0, 0, 1, "c.SERIAL4", "SERIAL4"], [0, 0, 1, "c.SERIAL5", "SERIAL5"], [0, 0, 1, "c.SERIAL6", "SERIAL6"], [0, 0, 1, "c.SERVO", "SERVO"], [0, 0, 1, "c.SERVO2", "SERVO2"], [0, 0, 1, "c.SERVO_SIGNAL", "SERVO_SIGNAL"], [0, 0, 1, "c.SERVO_TURNOUT", "SERVO_TURNOUT"], [0, 0, 1, "c.SET", "SET"], [0, 0, 1, "c.SETFREQ", "SETFREQ"], [0, 0, 1, "c.SETLOCO", "SETLOCO"], [0, 0, 1, "c.SET_POWER", "SET_POWER"], [0, 0, 1, "c.SET_TRACK", "SET_TRACK"], [0, 0, 1, "c.SIGNAL", "SIGNAL"], [0, 0, 1, "c.SIGNALH", "SIGNALH"], [0, 0, 1, "c.SPEED", "SPEED"], [0, 0, 1, "c.START", "START"], [0, 0, 1, "c.STASH", "STASH"], [0, 0, 1, "c.STEALTH", "STEALTH"], [0, 0, 1, "c.STEALTH_GLOBAL", "STEALTH_GLOBAL"], [0, 0, 1, "c.STOP", "STOP"], [0, 0, 1, "c.THROW", "THROW"], [0, 0, 1, "c.TOGGLE_TURNOUT", "TOGGLE_TURNOUT"], [0, 0, 1, "c.TT_ADDPOSITION", "TT_ADDPOSITION"], [0, 0, 1, "c.TURNOUT", "TURNOUT"], [0, 0, 1, "c.TURNOUTL", "TURNOUTL"], [0, 0, 1, "c.UNJOIN", "UNJOIN"], [0, 0, 1, "c.UNLATCH", "UNLATCH"], [0, 0, 1, "c.VIRTUAL_SIGNAL", "VIRTUAL_SIGNAL"], [0, 0, 1, "c.VIRTUAL_TURNOUT", "VIRTUAL_TURNOUT"], [0, 0, 1, "c.WAITFOR", "WAITFOR"], [0, 0, 1, "c.WAITFORTT", "WAITFORTT"], [0, 0, 1, "c.WITHROTTLE", "WITHROTTLE"], [0, 0, 1, "c.XFOFF", "XFOFF"], [0, 0, 1, "c.XFON", "XFON"], [0, 0, 1, "c.XFTOGGLE", "XFTOGGLE"], [0, 0, 1, "c.XFWD", "XFWD"], [0, 0, 1, "c.XREV", "XREV"]]}, "objnames": {"0": ["c", "macro", "C macro"]}, "objtypes": {"0": "c:macro"}, "terms": {"0": 0, "1": 0, "127": 0, "255": 0, "3": 0, "500": 0, "A": 0, "AT": 0, "IF": 0, "If": 0, "ON": 0, "abov": 0, "accessori": 0, "acof": 0, "acon": 0, "activ": 0, "activatel": 0, "activeangl": 0, "adapt": 0, "add": 0, "addr": 0, "address": 0, "advanc": 0, "after": 0, "afteroverload": 0, "agttempt": 0, "alia": 0, "all": 0, "allow": 0, "also": 0, "altern": 0, "amber": 0, "amberaspect": 0, "ambercolour": 0, "amberpin": 0, "amberpo": 0, "an": 0, "analog": 0, "analogpin": 0, "angl": 0, "ani": 0, "anim": 0, "annod": 0, "anoth": 0, "anout": 0, "appear": 0, "ar": 0, "arrai": 0, "aspect": 0, "atgt": 0, "atlt": 0, "attimeout": 0, "autom": 0, "automat": 0, "autostart": 0, "avail": 0, "b": 0, "base": 0, "basic": 0, "becom": 0, "being": 0, "between": 0, "blink": 0, "block": 0, "blockid": 0, "blue": 0, "broadcast": 0, "button": 0, "c": 0, "cab": 0, "call": 0, "can": 0, "capabl": 0, "capot": 0, "caption": 0, "cbu": 0, "chang": 0, "charact": 0, "check": 0, "clear": 0, "clear_all_stash": 0, "clear_stash": 0, "close": 0, "code": 0, "colour": 0, "command": 0, "commandst": 0, "common": 0, "compon": 0, "configur": 0, "configure_servo": 0, "consecut": 0, "consecutin": 0, "context": 0, "control": 0, "count": 0, "creat": 0, "curremnt": 0, "currenmt": 0, "current": 0, "cuttent": 0, "cv": 0, "dai": 0, "dc": 0, "dcc": 0, "dcc_signal": 0, "dcc_turntabl": 0, "dccx_signal": 0, "deactiv": 0, "deactivatel": 0, "debounc": 0, "decativ": 0, "dedfin": 0, "default": 0, "defi": 0, "defin": 0, "delai": 0, "delaymin": 0, "delayrandom": 0, "depend": 0, "describ": 0, "descript": 0, "determin": 0, "devic": 0, "diagnost": 0, "differ": 0, "direct": 0, "disabl": 0, "disconnect": 0, "displai": 0, "do": 0, "done": 0, "drive": 0, "driven": 0, "driver": 0, "durat": 0, "effect": 0, "els": 0, "embed": 0, "emerg": 0, "end": 0, "endexrail": 0, "endif": 0, "endtask": 0, "enter": 0, "entri": 0, "estop": 0, "etc": 0, "event": 0, "eventid": 0, "ex": 0, "except": 0, "execut": 0, "expect": 0, "extend": 0, "extern": 0, "extra": 0, "extt_turnt": 0, "fade": 0, "fals": 0, "fastclock": 0, "feedback": 0, "finction": 0, "flag": 0, "foff": 0, "follow": 0, "fon": 0, "forget": 0, "format": 0, "forward": 0, "free": 0, "freq": 0, "frequenc": 0, "from": 0, "ftoggl": 0, "fuinctin": 0, "func": 0, "funcmap": 0, "function": 0, "fwd": 0, "g": 0, "gate": 0, "given": 0, "goe": 0, "goto": 0, "greater": 0, "green": 0, "greenaspect": 0, "greencolour": 0, "greenpin": 0, "greenpo": 0, "gturntabl": 0, "h": 0, "ha": 0, "hadler": 0, "hal": 0, "hal_ignore_default": 0, "haltyp": 0, "hand": 0, "handl": 0, "hardwar": 0, "have": 0, "here": 0, "hidden": 0, "hide": 0, "high": 0, "home": 0, "hour": 0, "hourli": 0, "human": 0, "i": 0, "id": 0, "ifamb": 0, "ifclos": 0, "ifgreen": 0, "ifgt": 0, "ifloco": 0, "iflt": 0, "ifnot": 0, "ifr": 0, "ifrandom": 0, "ifreserv": 0, "ifthrown": 0, "iftimeout": 0, "ifttposit": 0, "ignor": 0, "immedi": 0, "imperson": 0, "inact": 0, "inactiveangl": 0, "includ": 0, "inear": 0, "instruct": 0, "interfac": 0, "intil": 0, "introduc": 0, "invers": 0, "invert": 0, "invert_direct": 0, "issu": 0, "jmri": 0, "jmri_sensor": 0, "join": 0, "jump": 0, "keyword": 0, "killal": 0, "kind": 0, "label": 0, "larg": 0, "latch": 0, "lcc": 0, "lccx": 0, "lcd": 0, "lcn": 0, "led": 0, "legaci": 0, "less": 0, "linear": 0, "list": 0, "load": 0, "loc": 0, "local": 0, "loco": 0, "loco_id": 0, "logic": 0, "long": 0, "longaddr": 0, "low": 0, "m": 0, "mai": 0, "main": 0, "make": 0, "manipul": 0, "map": 0, "mark": 0, "match": 0, "max": 0, "maxdelai": 0, "mean": 0, "merg": 0, "messag": 0, "millisecond": 0, "min": 0, "mindelai": 0, "minut": 0, "mode": 0, "modifi": 0, "momentari": 0, "move": 0, "movement": 0, "movett": 0, "msg": 0, "multi": 0, "multipl": 0, "must": 0, "name": 0, "neg": 0, "neopixel": 0, "neopixel_sign": 0, "neorgb": 0, "nest": 0, "new": 0, "non": 0, "normal": 0, "number": 0, "numer": 0, "obsolet": 0, "off": 0, "offduti": 0, "ol": 0, "omit": 0, "onacof": 0, "onacon": 0, "onactiv": 0, "onactivatel": 0, "onamb": 0, "onbutton": 0, "onchang": 0, "onclockmin": 0, "onclocktim": 0, "onclos": 0, "ondeactiv": 0, "ondeactivatel": 0, "onduti": 0, "one": 0, "ongreen": 0, "onlcc": 0, "onli": 0, "onoff": 0, "onoverload": 0, "onr": 0, "onrot": 0, "onsensor": 0, "onthrow": 0, "ontim": 0, "oper": 0, "option": 0, "other": 0, "out": 0, "output": 0, "over": 0, "overload": 0, "packet": 0, "page": 0, "param": 0, "param1": 0, "param2": 0, "paramet": 0, "pars": 0, "path": 0, "paus": 0, "percent": 0, "perform": 0, "pickup_stash": 0, "pin": 0, "pin_turnout": 0, "pixel": 0, "point": 0, "pom": 0, "pos1": 0, "pos2": 0, "posit": 0, "power": 0, "poweroff": 0, "poweron": 0, "prefer": 0, "prefix": 0, "previous": 0, "print": 0, "probabl": 0, "process": 0, "profil": 0, "prog": 0, "program": 0, "protocol": 0, "provid": 0, "puin": 0, "pwm": 0, "quot": 0, "r": 0, "railroad": 0, "random": 0, "randomli": 0, "raw": 0, "reach": 0, "read": 0, "read_loco": 0, "readabl": 0, "recei": 0, "receiv": 0, "red": 0, "redaspect": 0, "redcolour": 0, "redpin": 0, "redpo": 0, "refer": 0, "remain": 0, "remind": 0, "remov": 0, "request": 0, "reserv": 0, "reset": 0, "resolv": 0, "resum": 0, "return": 0, "rev": 0, "revers": 0, "rgb": 0, "roster": 0, "rotat": 0, "rotate_dcc": 0, "rout": 0, "route_act": 0, "route_capt": 0, "route_dis": 0, "route_hidden": 0, "route_inact": 0, "row": 0, "run": 0, "same": 0, "satisfi": 0, "satisfield": 0, "satisfil": 0, "save": 0, "screen": 0, "see": 0, "send": 0, "sender": 0, "senderid": 0, "sendloco": 0, "sensor": 0, "sensor_id": 0, "sent": 0, "separ": 0, "sequenc": 0, "sequenti": 0, "serial": 0, "serial1": 0, "serial2": 0, "serial3": 0, "serial4": 0, "serial5": 0, "serial6": 0, "servo": 0, "servo2": 0, "servo_sign": 0, "servo_turnout": 0, "set": 0, "set_pow": 0, "set_track": 0, "setfreq": 0, "setloco": 0, "setup": 0, "short": 0, "shown": 0, "sigid": 0, "signal": 0, "signal_id": 0, "signalh": 0, "signl": 0, "singl": 0, "slowli": 0, "so": 0, "someth": 0, "specif": 0, "speed": 0, "start": 0, "startup": 0, "stash": 0, "state": 0, "station": 0, "statu": 0, "stealth": 0, "stealth_glob": 0, "step": 0, "stop": 0, "string": 0, "subaddr": 0, "subaddress": 0, "switch": 0, "system": 0, "tabl": 0, "take": 0, "target": 0, "task": 0, "tell": 0, "termin": 0, "tertmin": 0, "text": 0, "than": 0, "thi": 0, "thr": 0, "throttl": 0, "throw": 0, "thrown": 0, "time": 0, "timeout": 0, "timeout_m": 0, "timer": 0, "tirnout": 0, "toggl": 0, "toggle_turnout": 0, "token": 0, "track": 0, "track_id": 0, "transfer": 0, "traqck": 0, "tt_addposit": 0, "turn": 0, "turnout": 0, "turnout_id": 0, "turnoutl": 0, "turntabl": 0, "turntable_id": 0, "type": 0, "typic": 0, "uniqu": 0, "unjoin": 0, "unlatch": 0, "until": 0, "us": 0, "usb": 0, "user": 0, "valu": 0, "virtual": 0, "virtual_sign": 0, "virtual_turnout": 0, "visibl": 0, "vpim": 0, "vpin": 0, "wa": 0, "wait": 0, "waitfor": 0, "waitfortt": 0, "when": 0, "where": 0, "whether": 0, "which": 0, "while": 0, "without": 0, "withrottl": 0, "write": 0, "xfoff": 0, "xfon": 0, "xftoggl": 0, "xfwd": 0, "xrev": 0}, "titles": ["EXRAIL Language documentation"], "titleterms": {"document": 0, "exrail": 0, "introduct": 0, "languag": 0, "macro": 0}})
\ No newline at end of file
diff --git a/devel/html/sitemap.xml b/devel/html/sitemap.xml
deleted file mode 100644
index a953c77..0000000
--- a/devel/html/sitemap.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
https://dcc-ex.com/CommandStation-EX/devel/en/index.html https://dcc-ex.com/CommandStation-EX/devel/en/genindex.html https://dcc-ex.com/CommandStation-EX/devel/en/search.html
\ No newline at end of file
diff --git a/genindex.html b/genindex.html
index 1f4479f..8a9a254 100644
--- a/genindex.html
+++ b/genindex.html
@@ -1,4 +1,3 @@
-
@@ -48,25 +47,10 @@
-
-
-
-
diff --git a/index.html b/index.html
index 68e3ad1..99a2597 100644
--- a/index.html
+++ b/index.html
@@ -1,4 +1,3 @@
-
@@ -49,8 +48,7 @@