Added sphinx documentation

This commit is contained in:
Matthias Heisig
2025-04-28 17:15:57 +02:00
parent 94381dc704
commit 0d201a140a
86 changed files with 10280 additions and 0 deletions

149
docs/DUTs.rst Normal file
View File

@@ -0,0 +1,149 @@
***************************
DUTs
***************************
E_BATTERY_STATUS
================================
.. plc:autoenum:: E_BATTERY_STATUS
E_BMS_CONTROL_MODE
================================
.. plc:autoenum:: E_BMS_CONTROL_MODE
E_BMS_STATE
================================
.. plc:autoenum:: E_BMS_STATE
E_CHARGE_STATUS
================================
.. plc:autoenum:: E_CHARGE_STATUS
E_CYCLE_STATUS
================================
.. plc:autoenum:: E_CYCLE_STATUS
E_REACTIVE_POWER_TYPE
================================
.. plc:autoenum:: E_REACTIVE_POWER_TYPE
E_COMPONENT_STATUS
================================
.. plc:autoenum:: E_COMPONENT_STATUS
ST_AUTO_HMI_INTERFACE
================================
.. plc:autostruct:: ST_AUTO_HMI_INTERFACE
ST_MODULE_HMI_INTERFACE
================================
.. plc:autostruct:: ST_MODULE_HMI_INTERFACE
ST_MODULE_VOLT_CONFIG
================================
.. plc:autostruct:: ST_MODULE_VOLT_CONFIG
ST_STRING_HMI_INTERFACE
================================
.. plc:autostruct:: ST_STRING_HMI_INTERFACE
ST_STRING_VOLT_CONFIG
================================
.. plc:autostruct:: ST_STRING_VOLT_CONFIG
ST_UNIT_HMI_INTERFACE
================================
.. plc:autostruct:: ST_UNIT_HMI_INTERFACE
ST_UNIT_CONFIG
================================
.. plc:autostruct:: ST_UNIT_CONFIG
Modbus
================================
ST_EMS_MODBUS_INTERFACE
---------------------------------
.. plc:autostruct:: ST_EMS_MODBUS_INTERFACE
ErrorWarningRegisters
---------------------------------
ST_DWORD_UNIT_ERROR_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_DWORD_UNIT_ERROR_BITMAP
ST_DWORD_UNIT_WARNING_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_DWORD_UNIT_WARNING_BITMAP
ST_WORD_BMS_ERROR_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_WORD_BMS_ERROR_BITMAP
ST_WORD_BMS_WARNING_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_WORD_BMS_WARNING_BITMAP
U_BMS_ERROR_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_BMS_ERROR_REGISTER
U_BMS_WARNING_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_BMS_WARNING_REGISTER
U_UNIT_ERROR_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_UNIT_ERROR_REGISTER
U_UNIT_WARNING_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_UNIT_WARNING_REGISTER
HoldingRegisters
---------------------------------
ST_MODBUS_REG_10
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_10
ST_MODBUS_REG_11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_11
ST_MODBUS_REG_12
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_12
ST_MODBUS_REG_13
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_13

20
docs/GVLs.rst Normal file
View File

@@ -0,0 +1,20 @@
***************************
GVLs
***************************
GVL_CONFIG
================================
.. plc:autogvl:: GVL_CONFIG
GVL_MODBUS
================================
.. plc:autogvl:: GVL_MODBUS
GVL_SCADA
================================
.. plc:autogvl:: GVL_SCADA

20
docs/Makefile Normal file
View File

@@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = source
BUILDDIR = build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

69
docs/POUs.rst Normal file
View File

@@ -0,0 +1,69 @@
***************************
POUs
***************************
.. plc:autofunctionblock:: FB_Module
:members:
.. plc:autofunctionblock:: FB_PowerMeter
.. plc:autofunctionblock:: FB_Safety
.. plc:autofunctionblock:: FB_String
:members:
.. plc:autofunctionblock:: FB_UMD705
.. plc:autofunctionblock:: FB_Unit
:members:
.. plc:autoprogram:: MAIN
Sunspec
================================
.. plc:autofunctionblock:: FB_PowerSupplySunspec
:members:
ST_SUNSPEC_CURRENT_VALUES
---------------------------------
.. plc:autostruct:: ST_SUNSPEC_CURRENT_VALUES
U_SUNSPEC_ERROR
---------------------------------
.. plc:autoenum:: U_SUNSPEC_ERROR
ModelData
---------------------------------
ST_SunspecInverterThreePhase
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_SunspecInverterThreePhase
ST_SunspecNameplateRatings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_SunspecNameplateRatings
StatePattern
---------------------------------
StateEvents
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autofunctionblock:: I_SunspecStateEvents
:members:
States
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autofunctionblock:: FB_SunspecErrorState
:members:
.. plc:autofunctionblock:: FB_SunspecOffState
:members:

BIN
docs/build/doctrees/DUTs.doctree vendored Normal file

Binary file not shown.

BIN
docs/build/doctrees/GVLs.doctree vendored Normal file

Binary file not shown.

BIN
docs/build/doctrees/POUs.doctree vendored Normal file

Binary file not shown.

BIN
docs/build/doctrees/environment.pickle vendored Normal file

Binary file not shown.

BIN
docs/build/doctrees/index.doctree vendored Normal file

Binary file not shown.

4
docs/build/html/.buildinfo vendored Normal file
View File

@@ -0,0 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 8e3992c2aa80a6672d9328a5d36ac809
tags: 645f666f9bcd5a90fca523b33c5a78b7

1728
docs/build/html/DUTs.html vendored Normal file

File diff suppressed because it is too large Load Diff

211
docs/build/html/GVLs.html vendored Normal file
View File

@@ -0,0 +1,211 @@
<!DOCTYPE html>
<html class="writer-html5" lang="de">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>GVLs &mdash; Uniper Dokumentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Stichwortverzeichnis" href="genindex.html" />
<link rel="search" title="Suche" href="search.html" />
<link rel="next" title="POUs" href="POUs.html" />
<link rel="prev" title="DUTs" href="DUTs.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
Uniper
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Dokumentation durchsuchen" aria-label="Dokumentation durchsuchen" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="DUTs.html">DUTs</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">GVLs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#gvl-config">GVL_CONFIG</a></li>
<li class="toctree-l2"><a class="reference internal" href="#gvl-modbus">GVL_MODBUS</a></li>
<li class="toctree-l2"><a class="reference internal" href="#gvl-scada">GVL_SCADA</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="POUs.html">POUs</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Uniper</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">GVLs</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/GVLs.rst.txt" rel="nofollow"> Quelltext anzeigen</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="gvls">
<h1>GVLs<a class="headerlink" href="#gvls" title="Permalink to this heading"></a></h1>
<section id="gvl-config">
<h2>GVL_CONFIG<a class="headerlink" href="#gvl-config" title="Permalink to this heading"></a></h2>
<dl class="plc gvl">
<dt class="sig sig-object plc" id="GVL_CONFIG">
<em class="property"><span class="pre">GVL</span><span class="w"> </span></em><span class="sig-name descname"><span class="n"><span class="pre">GVL_CONFIG</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#GVL_CONFIG" title="Link zu dieser Definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">VAR_GLOBAL CONSTANT<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>uiNumberOfStrings</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">UINT</span></code></span>) =========================== Number of active strings ===========================</p></li>
<li><p><strong>uiNumberOfUnits</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">UINT</span></code></span>) </p></li>
</ul>
</dd>
<dt class="field-even">VAR_GLOBAL PERSISTENT<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>axStringEnabled</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ARRAY[0..uiNumberOfStrings-1]</span> <span class="pre">OF</span> <span class="pre">BOOL</span></code></span>) </p></li>
<li><p><strong>stUnitConfig</strong> (<span><a class="reference internal" href="DUTs.html#ST_UNIT_CONFIG" title="ST_UNIT_CONFIG"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_UNIT_CONFIG</span></code></a></span>) =========================== Unit hardware config ===========================</p></li>
<li><p><strong>stConfigSCSCurrent</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_ANALOG_IO_CONFIG</span></code></span>) =========================== SCS Current measurement settings ===========================</p></li>
<li><p><strong>stEWLSCSCurrent</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_ANALOG_EW_LEVELS</span></code></span>) </p></li>
<li><p><strong>stEWDSCSCurrent</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_ANALOG_EW_DELAYS</span></code></span>) </p></li>
<li><p><strong>rPumpPosolytOnPower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) =========================== General settings =========================== Pump posolyt on power in %</p></li>
<li><p><strong>rPumpNegolytOnPower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Pump negolyt on power in %</p></li>
<li><p><strong>rPumpPosolytDisChrgPower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Pump posolyt discharge segment without inverter power in %</p></li>
<li><p><strong>rPumpNegolytDisChrgPower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Pump posolyt discharge segment without inverter power in %</p></li>
<li><p><strong>rPumpshutoffThreshold</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Unit voltage pumps shutoff threshold (Volt)</p></li>
<li><p><strong>rMinimumUnitVoltage</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Minimum unit voltage required for inverter startup (Volt)</p></li>
<li><p><strong>rMaximumUnitVoltage</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Maximum unit voltage for fully charged (Volt)</p></li>
<li><p><strong>rDeltaUnitVoltageShutdownDischarge</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Delta value to minimum unit voltage for shutdown discharge (Volt)</p></li>
<li><p><strong>rMaxAbsDiffVoltageUnitsOnModule</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Maximum absolute voltage difference between units in the same module</p></li>
<li><p><strong>rMaxAbsDiffVoltageModulesInString</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Maximum absolute voltage difference between Modules (Volt)</p></li>
<li><p><strong>diMinimumAbsPowerForEnable</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">DINT</span></code></span>) Minimum absolute power command to enable battery (Watt)</p></li>
<li><p><strong>diMaxStringChargingPower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">DINT</span></code></span>) Maximum allowed charging power (Watt) per String 24.000 W -&gt; 2.000 W per Unit</p></li>
<li><p><strong>diMaxStringDischargePower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">DINT</span></code></span>) Maximum allowed discharging power (Watt) per String 24.000 W -&gt; 2.000 W per Unit</p></li>
<li><p><strong>sInverterIpString1</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">STRING</span></code></span>) Inverter ip address for string 1</p></li>
<li><p><strong>sInverterIpString2</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">STRING</span></code></span>) Inverter ip address for string 2</p></li>
<li><p><strong>rAbsShutdownDischargePower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Absolute shutdown discharge power (Watt) 12.000 W -&gt; 1.000 W per unit</p></li>
<li><p><strong>xShutdownDischargeWithInverter</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">BOOL</span></code></span>) Allow inverter fast shutdown discharge</p></li>
<li><p><strong>rStringFullyChargedVoltage</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) String fully charged voltage (Volt) 960 V -&gt; 80 V per Unit</p></li>
<li><p><strong>rStringEmptyVoltage</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) String empty voltage (Volt) (617V is needed for the inverter to start up -&gt; 55.0V per Segment)</p></li>
<li><p><strong>timUnitStartupTime</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">TIME</span></code></span>) Unit wait startup time</p></li>
<li><p><strong>timUnitBalancingStartupTime</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">TIME</span></code></span>) Unit balancing wait startup time</p></li>
<li><p><strong>timStringReadyTimeout</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">TIME</span></code></span>) All modules in string not ready timeout</p></li>
<li><p><strong>timIsoErrorTimeout</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">TIME</span></code></span>) Timeout for isolation error</p></li>
<li><p><strong>rBalancingFactor</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">REAL</span></code></span>) Balancing factor</p></li>
<li><p><strong>xDummy</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">BOOL</span></code></span>) Attr: analysis := -33, Dummy to deactivate functions</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</section>
<section id="gvl-modbus">
<h2>GVL_MODBUS<a class="headerlink" href="#gvl-modbus" title="Permalink to this heading"></a></h2>
<dl class="plc gvl">
<dt class="sig sig-object plc" id="GVL_MODBUS">
<em class="property"><span class="pre">GVL</span><span class="w"> </span></em><span class="sig-name descname"><span class="n"><span class="pre">GVL_MODBUS</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#GVL_MODBUS" title="Link zu dieser Definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">VAR_GLOBAL<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>stModbusEMSComm</strong> (<span><a class="reference internal" href="DUTs.html#ST_EMS_MODBUS_INTERFACE" title="ST_EMS_MODBUS_INTERFACE"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_EMS_MODBUS_INTERFACE</span></code></a></span>) Modbus interface to customer EMS</p></li>
<li><p><strong>stBMSErrorReg</strong> (<span><a class="reference internal" href="DUTs.html#ST_MODBUS_REG_13" title="ST_MODBUS_REG_13"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_MODBUS_REG_13</span></code></a></span>) Addr: 13.000</p></li>
<li><p><strong>awWarningsUnitsActive</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ARRAY[0..(GVL_CONFIG.uiNumberOfUnits-1)]</span> <span class="pre">OF</span> <span class="pre">U_UNIT_WARNING_REGISTER</span></code></span>) Addr: 14.000 -&gt; 14.047 Index 0 -&gt; Unit 1, Index 1 -&gt; Unit 2 etc.</p></li>
<li><p><strong>awErrorsUnitsActive</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ARRAY[0..(GVL_CONFIG.uiNumberOfUnits-1)]</span> <span class="pre">OF</span> <span class="pre">U_UNIT_ERROR_REGISTER</span></code></span>) Addr: 15.000 -&gt; 15.047 Index 0 -&gt; Unit 1, Index 1 -&gt; Unit 2 etc.</p></li>
</ul>
</dd>
</dl>
</dd></dl>
</section>
<section id="gvl-scada">
<h2>GVL_SCADA<a class="headerlink" href="#gvl-scada" title="Permalink to this heading"></a></h2>
<dl class="plc gvl">
<dt class="sig sig-object plc" id="GVL_SCADA">
<em class="property"><span class="pre">GVL</span><span class="w"> </span></em><span class="sig-name descname"><span class="n"><span class="pre">GVL_SCADA</span></span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#GVL_SCADA" title="Link zu dieser Definition"></a></dt>
<dd><dl class="field-list simple">
<dt class="field-odd">VAR_GLOBAL<span class="colon">:</span></dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>stHMIInterface</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ARRAY[0..1]</span> <span class="pre">OF</span> <span class="pre">ST_STRING_HMI_INTERFACE</span></code></span>) Array for string HMI</p></li>
<li><p><strong>stAckAlarmsButton</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_HMI_CONTROL_BUTTON</span></code></span>) Acknowledge alarm button</p></li>
<li><p><strong>stAutomaticModeHMI</strong> (<span><a class="reference internal" href="DUTs.html#ST_AUTO_HMI_INTERFACE" title="ST_AUTO_HMI_INTERFACE"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">ST_AUTO_HMI_INTERFACE</span></code></a></span>) HMI interface to control the battery throught the HMI</p></li>
<li><p><strong>eRequestedControlMode</strong> (<span><a class="reference internal" href="DUTs.html#E_BMS_CONTROL_MODE" title="E_BMS_CONTROL_MODE"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">E_BMS_CONTROL_MODE</span></code></a></span>) Requested control mode by HMI</p></li>
<li><p><strong>eCurrentControlMode</strong> (<span><a class="reference internal" href="DUTs.html#E_BMS_CONTROL_MODE" title="E_BMS_CONTROL_MODE"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">E_BMS_CONTROL_MODE</span></code></a></span>) Current control mode</p></li>
<li><p><strong>xCanChangeControlMode</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">BOOL</span></code></span>) Can change current control mode</p></li>
<li><p><strong>diCurrentBatteryPower</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">DINT</span></code></span>) Current battery power</p></li>
<li><p><strong>lrChargedPowerValueWH</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">LREAL</span></code></span>) Last power charged value</p></li>
<li><p><strong>lrDischargedPowerValueWH</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">LREAL</span></code></span>) Last power discharged value</p></li>
<li><p><strong>lrLastCycleUtilityPowerValueWh</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">LREAL</span></code></span>) Last discharged utility power value</p></li>
<li><p><strong>eCycleStatus</strong> (<span><a class="reference internal" href="DUTs.html#E_CYCLE_STATUS" title="E_CYCLE_STATUS"><code class="xref plc plc-type docutils literal notranslate"><span class="pre">E_CYCLE_STATUS</span></code></a></span>) Cycle status</p></li>
<li><p><strong>xDummy</strong> (<span><code class="xref plc plc-type docutils literal notranslate"><span class="pre">BOOL</span></code></span>) </p></li>
</ul>
</dd>
</dl>
</dd></dl>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="DUTs.html" class="btn btn-neutral float-left" title="DUTs" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Zurück</a>
<a href="POUs.html" class="btn btn-neutral float-right" title="POUs" accesskey="n" rel="next">Weiter <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, M.Heisig.</p>
</div>
Erstellt mit <a href="https://www.sphinx-doc.org/">Sphinx</a> mit einem
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
bereitgestellt von <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

1532
docs/build/html/POUs.html vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,123 @@
/* Compatability shim for jQuery and underscores.js.
*
* Copyright Sphinx contributors
* Released under the two clause BSD licence
*/
/**
* 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;
}

294
docs/build/html/_static/base-stemmer.js vendored Normal file
View File

@@ -0,0 +1,294 @@
/**@constructor*/
BaseStemmer = function() {
this.setCurrent = function(value) {
this.current = value;
this.cursor = 0;
this.limit = this.current.length;
this.limit_backward = 0;
this.bra = this.cursor;
this.ket = this.limit;
};
this.getCurrent = function() {
return this.current;
};
this.copy_from = function(other) {
this.current = other.current;
this.cursor = other.cursor;
this.limit = other.limit;
this.limit_backward = other.limit_backward;
this.bra = other.bra;
this.ket = other.ket;
};
this.in_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor++;
return true;
};
this.in_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) return false;
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
this.cursor--;
return true;
};
this.out_grouping = function(s, min, max) {
if (this.cursor >= this.limit) return false;
var ch = this.current.charCodeAt(this.cursor);
if (ch > max || ch < min) {
this.cursor++;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
this.cursor++;
return true;
}
return false;
};
this.out_grouping_b = function(s, min, max) {
if (this.cursor <= this.limit_backward) return false;
var ch = this.current.charCodeAt(this.cursor - 1);
if (ch > max || ch < min) {
this.cursor--;
return true;
}
ch -= min;
if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
this.cursor--;
return true;
}
return false;
};
this.eq_s = function(s)
{
if (this.limit - this.cursor < s.length) return false;
if (this.current.slice(this.cursor, this.cursor + s.length) != s)
{
return false;
}
this.cursor += s.length;
return true;
};
this.eq_s_b = function(s)
{
if (this.cursor - this.limit_backward < s.length) return false;
if (this.current.slice(this.cursor - s.length, this.cursor) != s)
{
return false;
}
this.cursor -= s.length;
return true;
};
/** @return {number} */ this.find_among = function(v)
{
var i = 0;
var j = v.length;
var c = this.cursor;
var l = this.limit;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >>> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j; // smaller
// w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
var w = v[k];
var i2;
for (i2 = common; i2 < w[0].length; i2++)
{
if (c + common == l)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break; // v->s has been inspected
if (j == i) break; // only one item in v
// - but now we need to go round once more to get
// v->s inspected. This looks messy, but is actually
// the optimal approach.
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c + w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c + w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
// find_among_b is for backwards processing. Same comments apply
this.find_among_b = function(v)
{
var i = 0;
var j = v.length
var c = this.cursor;
var lb = this.limit_backward;
var common_i = 0;
var common_j = 0;
var first_key_inspected = false;
while (true)
{
var k = i + ((j - i) >> 1);
var diff = 0;
var common = common_i < common_j ? common_i : common_j;
var w = v[k];
var i2;
for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
{
if (c - common == lb)
{
diff = -1;
break;
}
diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
if (diff != 0) break;
common++;
}
if (diff < 0)
{
j = k;
common_j = common;
}
else
{
i = k;
common_i = common;
}
if (j - i <= 1)
{
if (i > 0) break;
if (j == i) break;
if (first_key_inspected) break;
first_key_inspected = true;
}
}
do {
var w = v[i];
if (common_i >= w[0].length)
{
this.cursor = c - w[0].length;
if (w.length < 4) return w[2];
var res = w[3](this);
this.cursor = c - w[0].length;
if (res) return w[2];
}
i = w[1];
} while (i >= 0);
return 0;
};
/* to replace chars between c_bra and c_ket in this.current by the
* chars in s.
*/
this.replace_s = function(c_bra, c_ket, s)
{
var adjustment = s.length - (c_ket - c_bra);
this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
this.limit += adjustment;
if (this.cursor >= c_ket) this.cursor += adjustment;
else if (this.cursor > c_bra) this.cursor = c_bra;
return adjustment;
};
this.slice_check = function()
{
if (this.bra < 0 ||
this.bra > this.ket ||
this.ket > this.limit ||
this.limit > this.current.length)
{
return false;
}
return true;
};
this.slice_from = function(s)
{
var result = false;
if (this.slice_check())
{
this.replace_s(this.bra, this.ket, s);
result = true;
}
return result;
};
this.slice_del = function()
{
return this.slice_from("");
};
this.insert = function(c_bra, c_ket, s)
{
var adjustment = this.replace_s(c_bra, c_ket, s);
if (c_bra <= this.bra) this.bra += adjustment;
if (c_bra <= this.ket) this.ket += adjustment;
};
this.slice_to = function()
{
var result = '';
if (this.slice_check())
{
result = this.current.slice(this.bra, this.ket);
}
return result;
};
this.assign_to = function()
{
return this.current.slice(0, this.limit);
};
};

903
docs/build/html/_static/basic.css vendored Normal file
View File

@@ -0,0 +1,903 @@
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/* -- main layout ----------------------------------------------------------- */
div.clearer {
clear: both;
}
div.section::after {
display: block;
content: '';
clear: left;
}
/* -- relbar ---------------------------------------------------------------- */
div.related {
width: 100%;
font-size: 90%;
}
div.related h3 {
display: none;
}
div.related ul {
margin: 0;
padding: 0 0 0 10px;
list-style: none;
}
div.related li {
display: inline;
}
div.related li.right {
float: right;
margin-right: 5px;
}
/* -- sidebar --------------------------------------------------------------- */
div.sphinxsidebarwrapper {
padding: 10px 5px 0 10px;
}
div.sphinxsidebar {
float: left;
width: 230px;
margin-left: -100%;
font-size: 90%;
word-wrap: break-word;
overflow-wrap : break-word;
}
div.sphinxsidebar ul {
list-style: none;
}
div.sphinxsidebar ul ul,
div.sphinxsidebar ul.want-points {
margin-left: 20px;
list-style: square;
}
div.sphinxsidebar ul ul {
margin-top: 0;
margin-bottom: 0;
}
div.sphinxsidebar form {
margin-top: 10px;
}
div.sphinxsidebar input {
border: 1px solid #98dbcc;
font-family: sans-serif;
font-size: 1em;
}
div.sphinxsidebar #searchbox form.search {
overflow: hidden;
}
div.sphinxsidebar #searchbox input[type="text"] {
float: left;
width: 80%;
padding: 0.25em;
box-sizing: border-box;
}
div.sphinxsidebar #searchbox input[type="submit"] {
float: left;
width: 20%;
border-left: none;
padding: 0.25em;
box-sizing: border-box;
}
img {
border: 0;
max-width: 100%;
}
/* -- search page ----------------------------------------------------------- */
ul.search {
margin: 10px 0 0 20px;
padding: 0;
}
ul.search li {
padding: 5px 0 5px 20px;
background-image: url(file.png);
background-repeat: no-repeat;
background-position: 0 7px;
}
ul.search li a {
font-weight: bold;
}
ul.search li p.context {
color: #888;
margin: 2px 0 0 30px;
text-align: left;
}
ul.keywordmatches li.goodmatch a {
font-weight: bold;
}
/* -- index page ------------------------------------------------------------ */
table.contentstable {
width: 90%;
margin-left: auto;
margin-right: auto;
}
table.contentstable p.biglink {
line-height: 150%;
}
a.biglink {
font-size: 1.3em;
}
span.linkdescr {
font-style: italic;
padding-top: 5px;
font-size: 90%;
}
/* -- general index --------------------------------------------------------- */
table.indextable {
width: 100%;
}
table.indextable td {
text-align: left;
vertical-align: top;
}
table.indextable ul {
margin-top: 0;
margin-bottom: 0;
list-style-type: none;
}
table.indextable > tbody > tr > td > ul {
padding-left: 0em;
}
table.indextable tr.pcap {
height: 10px;
}
table.indextable tr.cap {
margin-top: 10px;
background-color: #f2f2f2;
}
img.toggler {
margin-right: 3px;
margin-top: 3px;
cursor: pointer;
}
div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- domain module index --------------------------------------------------- */
table.modindextable td {
padding: 2px;
border-collapse: collapse;
}
/* -- general body styles --------------------------------------------------- */
div.body {
min-width: 360px;
max-width: 800px;
}
div.body p, div.body dd, div.body li, div.body blockquote {
-moz-hyphens: auto;
-ms-hyphens: auto;
-webkit-hyphens: auto;
hyphens: auto;
}
a.headerlink {
visibility: hidden;
}
h1:hover > a.headerlink,
h2:hover > a.headerlink,
h3:hover > a.headerlink,
h4:hover > a.headerlink,
h5:hover > a.headerlink,
h6:hover > a.headerlink,
dt:hover > a.headerlink,
caption:hover > a.headerlink,
p.caption:hover > a.headerlink,
div.code-block-caption:hover > a.headerlink {
visibility: visible;
}
div.body p.caption {
text-align: inherit;
}
div.body td {
text-align: left;
}
.first {
margin-top: 0 !important;
}
p.rubric {
margin-top: 30px;
font-weight: bold;
}
img.align-left, figure.align-left, .figure.align-left, object.align-left {
clear: left;
float: left;
margin-right: 1em;
}
img.align-right, figure.align-right, .figure.align-right, object.align-right {
clear: right;
float: right;
margin-left: 1em;
}
img.align-center, figure.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
img.align-default, figure.align-default, .figure.align-default {
display: block;
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left;
}
.align-center {
text-align: center;
}
.align-default {
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */
div.sidebar,
aside.sidebar {
margin: 0 0 0.5em 1em;
border: 1px solid #ddb;
padding: 7px;
background-color: #ffe;
width: 40%;
float: right;
clear: right;
overflow-x: auto;
}
p.sidebar-title {
font-weight: bold;
}
nav.contents,
aside.topic,
div.admonition, div.topic, blockquote {
clear: left;
}
/* -- topics ---------------------------------------------------------------- */
nav.contents,
aside.topic,
div.topic {
border: 1px solid #ccc;
padding: 7px;
margin: 10px 0 10px 0;
}
p.topic-title {
font-size: 1.1em;
font-weight: bold;
margin-top: 10px;
}
/* -- admonitions ----------------------------------------------------------- */
div.admonition {
margin-top: 10px;
margin-bottom: 10px;
padding: 7px;
}
div.admonition dt {
font-weight: bold;
}
p.admonition-title {
margin: 0px 10px 5px 0px;
font-weight: bold;
}
div.body p.centered {
text-align: center;
margin-top: 25px;
}
/* -- content of sidebars/topics/admonitions -------------------------------- */
div.sidebar > :last-child,
aside.sidebar > :last-child,
nav.contents > :last-child,
aside.topic > :last-child,
div.topic > :last-child,
div.admonition > :last-child {
margin-bottom: 0;
}
div.sidebar::after,
aside.sidebar::after,
nav.contents::after,
aside.topic::after,
div.topic::after,
div.admonition::after,
blockquote::after {
display: block;
content: '';
clear: both;
}
/* -- tables ---------------------------------------------------------------- */
table.docutils {
margin-top: 10px;
margin-bottom: 10px;
border: 0;
border-collapse: collapse;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
table.align-default {
margin-left: auto;
margin-right: auto;
}
table caption span.caption-number {
font-style: italic;
}
table caption span.caption-text {
}
table.docutils td, table.docutils th {
padding: 1px 8px 1px 5px;
border-top: 0;
border-left: 0;
border-right: 0;
border-bottom: 1px solid #aaa;
}
th {
text-align: left;
padding-right: 5px;
}
table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
th > :first-child,
td > :first-child {
margin-top: 0px;
}
th > :last-child,
td > :last-child {
margin-bottom: 0px;
}
/* -- figures --------------------------------------------------------------- */
div.figure, figure {
margin: 0.5em;
padding: 0.5em;
}
div.figure p.caption, figcaption {
padding: 0.3em;
}
div.figure p.caption span.caption-number,
figcaption span.caption-number {
font-style: italic;
}
div.figure p.caption span.caption-text,
figcaption span.caption-text {
}
/* -- field list styles ----------------------------------------------------- */
table.field-list td, table.field-list th {
border: 0 !important;
}
.field-list ul {
margin: 0;
padding-left: 1em;
}
.field-list p {
margin: 0;
}
.field-name {
-moz-hyphens: manual;
-ms-hyphens: manual;
-webkit-hyphens: manual;
hyphens: manual;
}
/* -- hlist styles ---------------------------------------------------------- */
table.hlist {
margin: 1em 0;
}
table.hlist td {
vertical-align: top;
}
/* -- object description styles --------------------------------------------- */
.sig {
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
}
.sig-name, code.descname {
background-color: transparent;
font-weight: bold;
}
.sig-name {
font-size: 1.1em;
}
code.descname {
font-size: 1.2em;
}
.sig-prename, code.descclassname {
background-color: transparent;
}
.optional {
font-size: 1.3em;
}
.sig-paren {
font-size: larger;
}
.sig-param.n {
font-style: italic;
}
/* C++ specific styling */
.sig-inline.c-texpr,
.sig-inline.cpp-texpr {
font-family: unset;
}
.sig.c .k, .sig.c .kt,
.sig.cpp .k, .sig.cpp .kt {
color: #0033B3;
}
.sig.c .m,
.sig.cpp .m {
color: #1750EB;
}
.sig.c .s, .sig.c .sc,
.sig.cpp .s, .sig.cpp .sc {
color: #067D17;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
:not(li) > ol > li:first-child > :first-child,
:not(li) > ul > li:first-child > :first-child {
margin-top: 0px;
}
:not(li) > ol > li:last-child > :last-child,
:not(li) > ul > li:last-child > :last-child {
margin-bottom: 0px;
}
ol.simple ol p,
ol.simple ul p,
ul.simple ol p,
ul.simple ul p {
margin-top: 0;
}
ol.simple > li:not(:first-child) > p,
ul.simple > li:not(:first-child) > p {
margin-top: 0;
}
ol.simple p,
ul.simple p {
margin-bottom: 0;
}
aside.footnote > span,
div.citation > span {
float: left;
}
aside.footnote > span:last-of-type,
div.citation > span:last-of-type {
padding-right: 0.5em;
}
aside.footnote > p {
margin-left: 2em;
}
div.citation > p {
margin-left: 4em;
}
aside.footnote > p:last-of-type,
div.citation > p:last-of-type {
margin-bottom: 0em;
}
aside.footnote > p:last-of-type:after,
div.citation > p:last-of-type:after {
content: "";
clear: both;
}
dl.field-list {
display: grid;
grid-template-columns: fit-content(30%) auto;
}
dl.field-list > dt {
font-weight: bold;
word-break: break-word;
padding-left: 0.5em;
padding-right: 5px;
}
dl.field-list > dd {
padding-left: 0.5em;
margin-top: 0em;
margin-left: 0em;
margin-bottom: 0em;
}
dl {
margin-bottom: 15px;
}
dd > :first-child {
margin-top: 0px;
}
dd ul, dd table {
margin-bottom: 10px;
}
dd {
margin-top: 3px;
margin-bottom: 10px;
margin-left: 30px;
}
dl > dd:last-child,
dl > dd:last-child > :last-child {
margin-bottom: 0;
}
dt:target, span.highlighted {
background-color: #fbe54e;
}
rect.highlighted {
fill: #fbe54e;
}
dl.glossary dt {
font-weight: bold;
font-size: 1.1em;
}
.versionmodified {
font-style: italic;
}
.system-message {
background-color: #fda;
padding: 5px;
border: 3px solid red;
}
.footnote:target {
background-color: #ffa;
}
.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
.classifier:before {
font-style: normal;
margin: 0 0.5em;
content: ":";
display: inline-block;
}
abbr, acronym {
border-bottom: dotted 1px;
cursor: help;
}
/* -- code displays --------------------------------------------------------- */
pre {
overflow: auto;
overflow-y: hidden; /* fixes display issues on Chrome browsers */
}
pre, div[class*="highlight-"] {
clear: both;
}
span.pre {
-moz-hyphens: none;
-ms-hyphens: none;
-webkit-hyphens: none;
hyphens: none;
white-space: nowrap;
}
div[class*="highlight-"] {
margin: 1em 0;
}
td.linenos pre {
border: 0;
background-color: transparent;
color: #aaa;
}
table.highlighttable {
display: block;
}
table.highlighttable tbody {
display: block;
}
table.highlighttable tr {
display: flex;
}
table.highlighttable td {
margin: 0;
padding: 0;
}
table.highlighttable td.linenos {
padding-right: 0.5em;
}
table.highlighttable td.code {
flex: 1;
overflow: hidden;
}
.highlight .hll {
display: block;
}
div.highlight pre,
table.highlighttable pre {
margin: 0;
}
div.code-block-caption + div {
margin-top: 0;
}
div.code-block-caption {
margin-top: 1em;
padding: 2px 5px;
font-size: small;
}
div.code-block-caption code {
background-color: transparent;
}
table.highlighttable td.linenos,
span.linenos,
div.highlight span.gp { /* gp: Generic.Prompt */
user-select: none;
-webkit-user-select: text; /* Safari fallback only */
-webkit-user-select: none; /* Chrome/Safari */
-moz-user-select: none; /* Firefox */
-ms-user-select: none; /* IE10+ */
}
div.code-block-caption span.caption-number {
padding: 0.1em 0.3em;
font-style: italic;
}
div.code-block-caption span.caption-text {
}
div.literal-block-wrapper {
margin: 1em 0;
}
code.xref, a code {
background-color: transparent;
font-weight: bold;
}
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
background-color: transparent;
}
.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */
img.math {
vertical-align: middle;
}
div.body div.math p {
text-align: center;
}
span.eqno {
float: right;
}
span.eqno a.headerlink {
position: absolute;
z-index: 1;
}
div.math:hover a.headerlink {
visibility: visible;
}
/* -- printout stylesheet --------------------------------------------------- */
@media print {
div.document,
div.documentwrapper,
div.bodywrapper {
margin: 0 !important;
width: 100%;
}
div.sphinxsidebar,
div.related,
div.footer,
#top-link {
display: none;
}
}

View File

@@ -0,0 +1 @@
.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions .rst-other-versions .rtd-current-item{font-weight:700}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}#flyout-search-form{padding:6px}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

4
docs/build/html/_static/css/theme.css vendored Normal file

File diff suppressed because one or more lines are too long

156
docs/build/html/_static/doctools.js vendored Normal file
View File

@@ -0,0 +1,156 @@
/*
* doctools.js
* ~~~~~~~~~~~
*
* Base JavaScript utilities for all Sphinx HTML documentation.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"use strict";
const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([
"TEXTAREA",
"INPUT",
"SELECT",
"BUTTON",
]);
const _ready = (callback) => {
if (document.readyState !== "loading") {
callback();
} else {
document.addEventListener("DOMContentLoaded", callback);
}
};
/**
* Small JavaScript module for the documentation.
*/
const Documentation = {
init: () => {
Documentation.initDomainIndexTable();
Documentation.initOnKeyListeners();
},
/**
* i18n support
*/
TRANSLATIONS: {},
PLURAL_EXPR: (n) => (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: (string) => {
const translated = Documentation.TRANSLATIONS[string];
switch (typeof translated) {
case "undefined":
return string; // no translation
case "string":
return translated; // translation exists
default:
return translated[0]; // (singular, plural) translation tuple exists
}
},
ngettext: (singular, plural, n) => {
const translated = Documentation.TRANSLATIONS[singular];
if (typeof translated !== "undefined")
return translated[Documentation.PLURAL_EXPR(n)];
return n === 1 ? singular : plural;
},
addTranslations: (catalog) => {
Object.assign(Documentation.TRANSLATIONS, catalog.messages);
Documentation.PLURAL_EXPR = new Function(
"n",
`return (${catalog.plural_expr})`
);
Documentation.LOCALE = catalog.locale;
},
/**
* helper function to focus on search bar
*/
focusSearchBar: () => {
document.querySelectorAll("input[name=q]")[0]?.focus();
},
/**
* Initialise the domain index toggle buttons
*/
initDomainIndexTable: () => {
const toggler = (el) => {
const idNumber = el.id.substr(7);
const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`);
if (el.src.substr(-9) === "minus.png") {
el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`;
toggledRows.forEach((el) => (el.style.display = "none"));
} else {
el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`;
toggledRows.forEach((el) => (el.style.display = ""));
}
};
const togglerElements = document.querySelectorAll("img.toggler");
togglerElements.forEach((el) =>
el.addEventListener("click", (event) => toggler(event.currentTarget))
);
togglerElements.forEach((el) => (el.style.display = ""));
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler);
},
initOnKeyListeners: () => {
// only install a listener if it is really needed
if (
!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS &&
!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.altKey || event.ctrlKey || event.metaKey) return;
if (!event.shiftKey) {
switch (event.key) {
case "ArrowLeft":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const prevLink = document.querySelector('link[rel="prev"]');
if (prevLink && prevLink.href) {
window.location.href = prevLink.href;
event.preventDefault();
}
break;
case "ArrowRight":
if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break;
const nextLink = document.querySelector('link[rel="next"]');
if (nextLink && nextLink.href) {
window.location.href = nextLink.href;
event.preventDefault();
}
break;
}
}
// some keyboard layouts may need Shift to get /
switch (event.key) {
case "/":
if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break;
Documentation.focusSearchBar();
event.preventDefault();
}
});
},
};
// quick alias for translations
const _ = Documentation.gettext;
_ready(Documentation.init);

View File

@@ -0,0 +1,14 @@
var DOCUMENTATION_OPTIONS = {
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
VERSION: '',
LANGUAGE: 'de',
COLLAPSE_INDEX: false,
BUILDER: 'html',
FILE_SUFFIX: '.html',
LINK_SUFFIX: '.html',
HAS_SOURCE: true,
SOURCELINK_SUFFIX: '.txt',
NAVIGATION_WITH_KEYS: false,
SHOW_SEARCH_SUMMARY: true,
ENABLE_SEARCH_SHORTCUTS: true,
};

BIN
docs/build/html/_static/file.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,577 @@
// Generated by Snowball 2.1.0 - https://snowballstem.org/
/**@constructor*/
GermanStemmer = function() {
var base = new BaseStemmer();
/** @const */ var a_0 = [
["", -1, 5],
["U", 0, 2],
["Y", 0, 1],
["\u00E4", 0, 3],
["\u00F6", 0, 4],
["\u00FC", 0, 2]
];
/** @const */ var a_1 = [
["e", -1, 2],
["em", -1, 1],
["en", -1, 2],
["ern", -1, 1],
["er", -1, 1],
["s", -1, 3],
["es", 5, 2]
];
/** @const */ var a_2 = [
["en", -1, 1],
["er", -1, 1],
["st", -1, 2],
["est", 2, 1]
];
/** @const */ var a_3 = [
["ig", -1, 1],
["lich", -1, 1]
];
/** @const */ var a_4 = [
["end", -1, 1],
["ig", -1, 2],
["ung", -1, 1],
["lich", -1, 3],
["isch", -1, 2],
["ik", -1, 2],
["heit", -1, 3],
["keit", -1, 4]
];
/** @const */ var /** Array<int> */ g_v = [17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32, 8];
/** @const */ var /** Array<int> */ g_s_ending = [117, 30, 5];
/** @const */ var /** Array<int> */ g_st_ending = [117, 30, 4];
var /** number */ I_x = 0;
var /** number */ I_p2 = 0;
var /** number */ I_p1 = 0;
/** @return {boolean} */
function r_prelude() {
var /** number */ v_1 = base.cursor;
while(true)
{
var /** number */ v_2 = base.cursor;
lab0: {
lab1: {
var /** number */ v_3 = base.cursor;
lab2: {
base.bra = base.cursor;
if (!(base.eq_s("\u00DF")))
{
break lab2;
}
base.ket = base.cursor;
if (!base.slice_from("ss"))
{
return false;
}
break lab1;
}
base.cursor = v_3;
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
}
continue;
}
base.cursor = v_2;
break;
}
base.cursor = v_1;
while(true)
{
var /** number */ v_4 = base.cursor;
lab3: {
golab4: while(true)
{
var /** number */ v_5 = base.cursor;
lab5: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab5;
}
base.bra = base.cursor;
lab6: {
var /** number */ v_6 = base.cursor;
lab7: {
if (!(base.eq_s("u")))
{
break lab7;
}
base.ket = base.cursor;
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab7;
}
if (!base.slice_from("U"))
{
return false;
}
break lab6;
}
base.cursor = v_6;
if (!(base.eq_s("y")))
{
break lab5;
}
base.ket = base.cursor;
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab5;
}
if (!base.slice_from("Y"))
{
return false;
}
}
base.cursor = v_5;
break golab4;
}
base.cursor = v_5;
if (base.cursor >= base.limit)
{
break lab3;
}
base.cursor++;
}
continue;
}
base.cursor = v_4;
break;
}
return true;
};
/** @return {boolean} */
function r_mark_regions() {
I_p1 = base.limit;
I_p2 = base.limit;
var /** number */ v_1 = base.cursor;
{
var /** number */ c1 = base.cursor + 3;
if (c1 > base.limit)
{
return false;
}
base.cursor = c1;
}
I_x = base.cursor;
base.cursor = v_1;
golab0: while(true)
{
lab1: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab1;
}
break golab0;
}
if (base.cursor >= base.limit)
{
return false;
}
base.cursor++;
}
golab2: while(true)
{
lab3: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab3;
}
break golab2;
}
if (base.cursor >= base.limit)
{
return false;
}
base.cursor++;
}
I_p1 = base.cursor;
lab4: {
if (!(I_p1 < I_x))
{
break lab4;
}
I_p1 = I_x;
}
golab5: while(true)
{
lab6: {
if (!(base.in_grouping(g_v, 97, 252)))
{
break lab6;
}
break golab5;
}
if (base.cursor >= base.limit)
{
return false;
}
base.cursor++;
}
golab7: while(true)
{
lab8: {
if (!(base.out_grouping(g_v, 97, 252)))
{
break lab8;
}
break golab7;
}
if (base.cursor >= base.limit)
{
return false;
}
base.cursor++;
}
I_p2 = base.cursor;
return true;
};
/** @return {boolean} */
function r_postlude() {
var /** number */ among_var;
while(true)
{
var /** number */ v_1 = base.cursor;
lab0: {
base.bra = base.cursor;
among_var = base.find_among(a_0);
if (among_var == 0)
{
break lab0;
}
base.ket = base.cursor;
switch (among_var) {
case 1:
if (!base.slice_from("y"))
{
return false;
}
break;
case 2:
if (!base.slice_from("u"))
{
return false;
}
break;
case 3:
if (!base.slice_from("a"))
{
return false;
}
break;
case 4:
if (!base.slice_from("o"))
{
return false;
}
break;
case 5:
if (base.cursor >= base.limit)
{
break lab0;
}
base.cursor++;
break;
}
continue;
}
base.cursor = v_1;
break;
}
return true;
};
/** @return {boolean} */
function r_R1() {
if (!(I_p1 <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_R2() {
if (!(I_p2 <= base.cursor))
{
return false;
}
return true;
};
/** @return {boolean} */
function r_standard_suffix() {
var /** number */ among_var;
var /** number */ v_1 = base.limit - base.cursor;
lab0: {
base.ket = base.cursor;
among_var = base.find_among_b(a_1);
if (among_var == 0)
{
break lab0;
}
base.bra = base.cursor;
if (!r_R1())
{
break lab0;
}
switch (among_var) {
case 1:
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!base.slice_del())
{
return false;
}
var /** number */ v_2 = base.limit - base.cursor;
lab1: {
base.ket = base.cursor;
if (!(base.eq_s_b("s")))
{
base.cursor = base.limit - v_2;
break lab1;
}
base.bra = base.cursor;
if (!(base.eq_s_b("nis")))
{
base.cursor = base.limit - v_2;
break lab1;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 3:
if (!(base.in_grouping_b(g_s_ending, 98, 116)))
{
break lab0;
}
if (!base.slice_del())
{
return false;
}
break;
}
}
base.cursor = base.limit - v_1;
var /** number */ v_3 = base.limit - base.cursor;
lab2: {
base.ket = base.cursor;
among_var = base.find_among_b(a_2);
if (among_var == 0)
{
break lab2;
}
base.bra = base.cursor;
if (!r_R1())
{
break lab2;
}
switch (among_var) {
case 1:
if (!base.slice_del())
{
return false;
}
break;
case 2:
if (!(base.in_grouping_b(g_st_ending, 98, 116)))
{
break lab2;
}
{
var /** number */ c1 = base.cursor - 3;
if (c1 < base.limit_backward)
{
break lab2;
}
base.cursor = c1;
}
if (!base.slice_del())
{
return false;
}
break;
}
}
base.cursor = base.limit - v_3;
var /** number */ v_4 = base.limit - base.cursor;
lab3: {
base.ket = base.cursor;
among_var = base.find_among_b(a_4);
if (among_var == 0)
{
break lab3;
}
base.bra = base.cursor;
if (!r_R2())
{
break lab3;
}
switch (among_var) {
case 1:
if (!base.slice_del())
{
return false;
}
var /** number */ v_5 = base.limit - base.cursor;
lab4: {
base.ket = base.cursor;
if (!(base.eq_s_b("ig")))
{
base.cursor = base.limit - v_5;
break lab4;
}
base.bra = base.cursor;
{
var /** number */ v_6 = base.limit - base.cursor;
lab5: {
if (!(base.eq_s_b("e")))
{
break lab5;
}
base.cursor = base.limit - v_5;
break lab4;
}
base.cursor = base.limit - v_6;
}
if (!r_R2())
{
base.cursor = base.limit - v_5;
break lab4;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 2:
{
var /** number */ v_7 = base.limit - base.cursor;
lab6: {
if (!(base.eq_s_b("e")))
{
break lab6;
}
break lab3;
}
base.cursor = base.limit - v_7;
}
if (!base.slice_del())
{
return false;
}
break;
case 3:
if (!base.slice_del())
{
return false;
}
var /** number */ v_8 = base.limit - base.cursor;
lab7: {
base.ket = base.cursor;
lab8: {
var /** number */ v_9 = base.limit - base.cursor;
lab9: {
if (!(base.eq_s_b("er")))
{
break lab9;
}
break lab8;
}
base.cursor = base.limit - v_9;
if (!(base.eq_s_b("en")))
{
base.cursor = base.limit - v_8;
break lab7;
}
}
base.bra = base.cursor;
if (!r_R1())
{
base.cursor = base.limit - v_8;
break lab7;
}
if (!base.slice_del())
{
return false;
}
}
break;
case 4:
if (!base.slice_del())
{
return false;
}
var /** number */ v_10 = base.limit - base.cursor;
lab10: {
base.ket = base.cursor;
if (base.find_among_b(a_3) == 0)
{
base.cursor = base.limit - v_10;
break lab10;
}
base.bra = base.cursor;
if (!r_R2())
{
base.cursor = base.limit - v_10;
break lab10;
}
if (!base.slice_del())
{
return false;
}
}
break;
}
}
base.cursor = base.limit - v_4;
return true;
};
this.stem = /** @return {boolean} */ function() {
var /** number */ v_1 = base.cursor;
r_prelude();
base.cursor = v_1;
var /** number */ v_2 = base.cursor;
r_mark_regions();
base.cursor = v_2;
base.limit_backward = base.cursor; base.cursor = base.limit;
r_standard_suffix();
base.cursor = base.limit_backward;
var /** number */ v_4 = base.cursor;
r_postlude();
base.cursor = v_4;
return true;
};
/**@return{string}*/
this['stemWord'] = function(/**string*/word) {
base.setCurrent(word);
this.stem();
return base.getCurrent();
};
};

2
docs/build/html/_static/jquery.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});

1
docs/build/html/_static/js/theme.js vendored Normal file

File diff suppressed because one or more lines are too long

228
docs/build/html/_static/js/versions.js vendored Normal file
View File

@@ -0,0 +1,228 @@
const themeFlyoutDisplay = "hidden";
const themeVersionSelector = true;
const themeLanguageSelector = true;
if (themeFlyoutDisplay === "attached") {
function renderLanguages(config) {
if (!config.projects.translations.length) {
return "";
}
// Insert 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 languagesHTML = `
<dl>
<dt>Languages</dt>
${languages
.map(
(translation) => `
<dd ${translation.slug == config.projects.current.slug ? 'class="rtd-current-item"' : ""}>
<a href="${translation.urls.documentation}">${translation.language.code}</a>
</dd>
`,
)
.join("\n")}
</dl>
`;
return languagesHTML;
}
function renderVersions(config) {
if (!config.versions.active.length) {
return "";
}
const versionsHTML = `
<dl>
<dt>Versionen</dt>
${config.versions.active
.map(
(version) => `
<dd ${version.slug === config.versions.current.slug ? 'class="rtd-current-item"' : ""}>
<a href="${version.urls.documentation}">${version.slug}</a>
</dd>
`,
)
.join("\n")}
</dl>
`;
return versionsHTML;
}
function renderDownloads(config) {
if (!Object.keys(config.versions.current.downloads).length) {
return "";
}
const downloadsNameDisplay = {
pdf: "PDF",
epub: "Epub",
htmlzip: "HTML",
};
const downloadsHTML = `
<dl>
<dt>Downloads</dt>
${Object.entries(config.versions.current.downloads)
.map(
([name, url]) => `
<dd>
<a href="${url}">${downloadsNameDisplay[name]}</a>
</dd>
`,
)
.join("\n")}
</dl>
`;
return downloadsHTML;
}
document.addEventListener("readthedocs-addons-data-ready", function (event) {
const config = event.detail.data();
const flyout = `
<div class="rst-versions" data-toggle="rst-versions" role="note">
<span class="rst-current-version" data-toggle="rst-current-version">
<span class="fa fa-book"> Read the Docs</span>
v: ${config.versions.current.slug}
<span class="fa fa-caret-down"></span>
</span>
<div class="rst-other-versions">
<div class="injected">
${renderLanguages(config)}
${renderVersions(config)}
${renderDownloads(config)}
<dl>
<dt>Auf Read the Docs</dt>
<dd>
<a href="${config.projects.current.urls.home}">Projektübersicht</a>
</dd>
<dd>
<a href="${config.projects.current.urls.builds}">Builds</a>
</dd>
<dd>
<a href="${config.projects.current.urls.downloads}">Downloads</a>
</dd>
</dl>
<dl>
<dt>Suche</dt>
<dd>
<form id="flyout-search-form">
<input
class="wy-form"
type="text"
name="q"
aria-label="Dokumentation durchsuchen"
placeholder="Dokumentation durchsuchen"
/>
</form>
</dd>
</dl>
<hr />
<small>
<span>Hosted by <a href="https://about.readthedocs.org/?utm_source=&utm_content=flyout">Read the Docs</a></span>
</small>
</div>
</div>
`;
// 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 = `
<select>
${versions
.map(
(version) => `
<option
value="${version.slug}"
${config.versions.current.slug === version.slug ? 'selected="selected"' : ""}
data-url="${version.urls.documentation}">
${version.slug}
</option>`,
)
.join("\n")}
</select>
`;
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 = `
<select>
${languages
.map(
(language) => `
<option
value="${language.language.code}"
${config.projects.current.slug === language.slug ? 'selected="selected"' : ""}
data-url="${language.urls.documentation}">
${language.language.name}
</option>`,
)
.join("\n")}
</select>
`;
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);
});
});

View File

@@ -0,0 +1,19 @@
/*
* language_data.js
* ~~~~~~~~~~~~~~~~
*
* This script contains the language-specific data used by searchtools.js,
* namely the list of stopwords, stemmer, scorer and splitter.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
var stopwords = ["aber", "alle", "allem", "allen", "aller", "alles", "als", "also", "am", "an", "ander", "andere", "anderem", "anderen", "anderer", "anderes", "anderm", "andern", "anderr", "anders", "auch", "auf", "aus", "bei", "bin", "bis", "bist", "da", "damit", "dann", "das", "dasselbe", "dazu", "da\u00df", "dein", "deine", "deinem", "deinen", "deiner", "deines", "dem", "demselben", "den", "denn", "denselben", "der", "derer", "derselbe", "derselben", "des", "desselben", "dessen", "dich", "die", "dies", "diese", "dieselbe", "dieselben", "diesem", "diesen", "dieser", "dieses", "dir", "doch", "dort", "du", "durch", "ein", "eine", "einem", "einen", "einer", "eines", "einig", "einige", "einigem", "einigen", "einiger", "einiges", "einmal", "er", "es", "etwas", "euch", "euer", "eure", "eurem", "euren", "eurer", "eures", "f\u00fcr", "gegen", "gewesen", "hab", "habe", "haben", "hat", "hatte", "hatten", "hier", "hin", "hinter", "ich", "ihm", "ihn", "ihnen", "ihr", "ihre", "ihrem", "ihren", "ihrer", "ihres", "im", "in", "indem", "ins", "ist", "jede", "jedem", "jeden", "jeder", "jedes", "jene", "jenem", "jenen", "jener", "jenes", "jetzt", "kann", "kein", "keine", "keinem", "keinen", "keiner", "keines", "k\u00f6nnen", "k\u00f6nnte", "machen", "man", "manche", "manchem", "manchen", "mancher", "manches", "mein", "meine", "meinem", "meinen", "meiner", "meines", "mich", "mir", "mit", "muss", "musste", "nach", "nicht", "nichts", "noch", "nun", "nur", "ob", "oder", "ohne", "sehr", "sein", "seine", "seinem", "seinen", "seiner", "seines", "selbst", "sich", "sie", "sind", "so", "solche", "solchem", "solchen", "solcher", "solches", "soll", "sollte", "sondern", "sonst", "um", "und", "uns", "unse", "unsem", "unsen", "unser", "unses", "unter", "viel", "vom", "von", "vor", "war", "waren", "warst", "was", "weg", "weil", "weiter", "welche", "welchem", "welchen", "welcher", "welches", "wenn", "werde", "werden", "wie", "wieder", "will", "wir", "wird", "wirst", "wo", "wollen", "wollte", "w\u00e4hrend", "w\u00fcrde", "w\u00fcrden", "zu", "zum", "zur", "zwar", "zwischen", "\u00fcber"];
/* Non-minified version is copied as a separate JS file, is available */
BaseStemmer=function(){this.setCurrent=function(r){this.current=r;this.cursor=0;this.limit=this.current.length;this.limit_backward=0;this.bra=this.cursor;this.ket=this.limit};this.getCurrent=function(){return this.current};this.copy_from=function(r){this.current=r.current;this.cursor=r.cursor;this.limit=r.limit;this.limit_backward=r.limit_backward;this.bra=r.bra;this.ket=r.ket};this.in_grouping=function(r,t,i){if(this.cursor>=this.limit)return false;var s=this.current.charCodeAt(this.cursor);if(s>i||s<t)return false;s-=t;if((r[s>>>3]&1<<(s&7))==0)return false;this.cursor++;return true};this.in_grouping_b=function(r,t,i){if(this.cursor<=this.limit_backward)return false;var s=this.current.charCodeAt(this.cursor-1);if(s>i||s<t)return false;s-=t;if((r[s>>>3]&1<<(s&7))==0)return false;this.cursor--;return true};this.out_grouping=function(r,t,i){if(this.cursor>=this.limit)return false;var s=this.current.charCodeAt(this.cursor);if(s>i||s<t){this.cursor++;return true}s-=t;if((r[s>>>3]&1<<(s&7))==0){this.cursor++;return true}return false};this.out_grouping_b=function(r,t,i){if(this.cursor<=this.limit_backward)return false;var s=this.current.charCodeAt(this.cursor-1);if(s>i||s<t){this.cursor--;return true}s-=t;if((r[s>>>3]&1<<(s&7))==0){this.cursor--;return true}return false};this.eq_s=function(r){if(this.limit-this.cursor<r.length)return false;if(this.current.slice(this.cursor,this.cursor+r.length)!=r){return false}this.cursor+=r.length;return true};this.eq_s_b=function(r){if(this.cursor-this.limit_backward<r.length)return false;if(this.current.slice(this.cursor-r.length,this.cursor)!=r){return false}this.cursor-=r.length;return true};this.find_among=function(r){var t=0;var i=r.length;var s=this.cursor;var e=this.limit;var h=0;var u=0;var n=false;while(true){var c=t+(i-t>>>1);var a=0;var f=h<u?h:u;var l=r[c];var o;for(o=f;o<l[0].length;o++){if(s+f==e){a=-1;break}a=this.current.charCodeAt(s+f)-l[0].charCodeAt(o);if(a!=0)break;f++}if(a<0){i=c;u=f}else{t=c;h=f}if(i-t<=1){if(t>0)break;if(i==t)break;if(n)break;n=true}}do{var l=r[t];if(h>=l[0].length){this.cursor=s+l[0].length;if(l.length<4)return l[2];var v=l[3](this);this.cursor=s+l[0].length;if(v)return l[2]}t=l[1]}while(t>=0);return 0};this.find_among_b=function(r){var t=0;var i=r.length;var s=this.cursor;var e=this.limit_backward;var h=0;var u=0;var n=false;while(true){var c=t+(i-t>>1);var a=0;var f=h<u?h:u;var l=r[c];var o;for(o=l[0].length-1-f;o>=0;o--){if(s-f==e){a=-1;break}a=this.current.charCodeAt(s-1-f)-l[0].charCodeAt(o);if(a!=0)break;f++}if(a<0){i=c;u=f}else{t=c;h=f}if(i-t<=1){if(t>0)break;if(i==t)break;if(n)break;n=true}}do{var l=r[t];if(h>=l[0].length){this.cursor=s-l[0].length;if(l.length<4)return l[2];var v=l[3](this);this.cursor=s-l[0].length;if(v)return l[2]}t=l[1]}while(t>=0);return 0};this.replace_s=function(r,t,i){var s=i.length-(t-r);this.current=this.current.slice(0,r)+i+this.current.slice(t);this.limit+=s;if(this.cursor>=t)this.cursor+=s;else if(this.cursor>r)this.cursor=r;return s};this.slice_check=function(){if(this.bra<0||this.bra>this.ket||this.ket>this.limit||this.limit>this.current.length){return false}return true};this.slice_from=function(r){var t=false;if(this.slice_check()){this.replace_s(this.bra,this.ket,r);t=true}return t};this.slice_del=function(){return this.slice_from("")};this.insert=function(r,t,i){var s=this.replace_s(r,t,i);if(r<=this.bra)this.bra+=s;if(r<=this.ket)this.ket+=s};this.slice_to=function(){var r="";if(this.slice_check()){r=this.current.slice(this.bra,this.ket)}return r};this.assign_to=function(){return this.current.slice(0,this.limit)}};
GermanStemmer=function(){var r=new BaseStemmer;var e=[["",-1,5],["U",0,2],["Y",0,1],["ä",0,3],["ö",0,4],["ü",0,2]];var i=[["e",-1,2],["em",-1,1],["en",-1,2],["ern",-1,1],["er",-1,1],["s",-1,3],["es",5,2]];var s=[["en",-1,1],["er",-1,1],["st",-1,2],["est",2,1]];var u=[["ig",-1,1],["lich",-1,1]];var a=[["end",-1,1],["ig",-1,2],["ung",-1,1],["lich",-1,3],["isch",-1,2],["ik",-1,2],["heit",-1,3],["keit",-1,4]];var c=[17,65,16,1,0,0,0,0,0,0,0,0,0,0,0,0,8,0,32,8];var t=[117,30,5];var o=[117,30,4];var f=0;var l=0;var n=0;function b(){var e=r.cursor;while(true){var i=r.cursor;r:{e:{var s=r.cursor;i:{r.bra=r.cursor;if(!r.eq_s("ß")){break i}r.ket=r.cursor;if(!r.slice_from("ss")){return false}break e}r.cursor=s;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=i;break}r.cursor=e;while(true){var u=r.cursor;r:{e:while(true){var a=r.cursor;i:{if(!r.in_grouping(c,97,252)){break i}r.bra=r.cursor;s:{var t=r.cursor;u:{if(!r.eq_s("u")){break u}r.ket=r.cursor;if(!r.in_grouping(c,97,252)){break u}if(!r.slice_from("U")){return false}break s}r.cursor=t;if(!r.eq_s("y")){break i}r.ket=r.cursor;if(!r.in_grouping(c,97,252)){break i}if(!r.slice_from("Y")){return false}}r.cursor=a;break e}r.cursor=a;if(r.cursor>=r.limit){break r}r.cursor++}continue}r.cursor=u;break}return true}function k(){n=r.limit;l=r.limit;var e=r.cursor;{var i=r.cursor+3;if(i>r.limit){return false}r.cursor=i}f=r.cursor;r.cursor=e;r:while(true){e:{if(!r.in_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}n=r.cursor;r:{if(!(n<f)){break r}n=f}r:while(true){e:{if(!r.in_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}r:while(true){e:{if(!r.out_grouping(c,97,252)){break e}break r}if(r.cursor>=r.limit){return false}r.cursor++}l=r.cursor;return true}function m(){var i;while(true){var s=r.cursor;r:{r.bra=r.cursor;i=r.find_among(e);if(i==0){break r}r.ket=r.cursor;switch(i){case 1:if(!r.slice_from("y")){return false}break;case 2:if(!r.slice_from("u")){return false}break;case 3:if(!r.slice_from("a")){return false}break;case 4:if(!r.slice_from("o")){return false}break;case 5:if(r.cursor>=r.limit){break r}r.cursor++;break}continue}r.cursor=s;break}return true}function _(){if(!(n<=r.cursor)){return false}return true}function v(){if(!(l<=r.cursor)){return false}return true}function g(){var e;var c=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(i);if(e==0){break r}r.bra=r.cursor;if(!_()){break r}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.slice_del()){return false}var f=r.limit-r.cursor;e:{r.ket=r.cursor;if(!r.eq_s_b("s")){r.cursor=r.limit-f;break e}r.bra=r.cursor;if(!r.eq_s_b("nis")){r.cursor=r.limit-f;break e}if(!r.slice_del()){return false}}break;case 3:if(!r.in_grouping_b(t,98,116)){break r}if(!r.slice_del()){return false}break}}r.cursor=r.limit-c;var l=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(s);if(e==0){break r}r.bra=r.cursor;if(!_()){break r}switch(e){case 1:if(!r.slice_del()){return false}break;case 2:if(!r.in_grouping_b(o,98,116)){break r}{var n=r.cursor-3;if(n<r.limit_backward){break r}r.cursor=n}if(!r.slice_del()){return false}break}}r.cursor=r.limit-l;var b=r.limit-r.cursor;r:{r.ket=r.cursor;e=r.find_among_b(a);if(e==0){break r}r.bra=r.cursor;if(!v()){break r}switch(e){case 1:if(!r.slice_del()){return false}var k=r.limit-r.cursor;e:{r.ket=r.cursor;if(!r.eq_s_b("ig")){r.cursor=r.limit-k;break e}r.bra=r.cursor;{var m=r.limit-r.cursor;i:{if(!r.eq_s_b("e")){break i}r.cursor=r.limit-k;break e}r.cursor=r.limit-m}if(!v()){r.cursor=r.limit-k;break e}if(!r.slice_del()){return false}}break;case 2:{var g=r.limit-r.cursor;e:{if(!r.eq_s_b("e")){break e}break r}r.cursor=r.limit-g}if(!r.slice_del()){return false}break;case 3:if(!r.slice_del()){return false}var d=r.limit-r.cursor;e:{r.ket=r.cursor;i:{var h=r.limit-r.cursor;s:{if(!r.eq_s_b("er")){break s}break i}r.cursor=r.limit-h;if(!r.eq_s_b("en")){r.cursor=r.limit-d;break e}}r.bra=r.cursor;if(!_()){r.cursor=r.limit-d;break e}if(!r.slice_del()){return false}}break;case 4:if(!r.slice_del()){return false}var w=r.limit-r.cursor;e:{r.ket=r.cursor;if(r.find_among_b(u)==0){r.cursor=r.limit-w;break e}r.bra=r.cursor;if(!v()){r.cursor=r.limit-w;break e}if(!r.slice_del()){return false}}break}}r.cursor=r.limit-b;return true}this.stem=function(){var e=r.cursor;b();r.cursor=e;var i=r.cursor;k();r.cursor=i;r.limit_backward=r.cursor;r.cursor=r.limit;g();r.cursor=r.limit_backward;var s=r.cursor;m();r.cursor=s;return true};this["stemWord"]=function(e){r.setCurrent(e);this.stem();return r.getCurrent()}};
Stemmer = GermanStemmer;

BIN
docs/build/html/_static/minus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

BIN
docs/build/html/_static/plus.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 B

75
docs/build/html/_static/pygments.css vendored Normal file
View File

@@ -0,0 +1,75 @@
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 */

566
docs/build/html/_static/searchtools.js vendored Normal file
View File

@@ -0,0 +1,566 @@
/*
* searchtools.js
* ~~~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilities for the full-text search.
*
* :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
"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] = 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,
};
}
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) => {
const docBuilder = DOCUMENTATION_OPTIONS.BUILDER;
const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT;
const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX;
const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX;
const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY;
const [docName, title, anchor, descr, score, _filename] = item;
let listItem = document.createElement("li");
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 = docUrlRoot + dirname;
linkUrl = requestUrl;
} else {
// normal html builders
requestUrl = docUrlRoot + 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 + ")";
else if (showSearchSummary)
fetch(requestUrl)
.then((responseData) => responseData.text())
.then((data) => {
if (data)
listItem.appendChild(
Search.makeSearchSummary(data, searchTerms)
);
});
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 = _(
`Search finished, found ${resultCount} page(s) matching the search query.`
);
};
const _displayNextItem = (
results,
resultCount,
searchTerms
) => {
// 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);
setTimeout(
() => _displayNextItem(results, resultCount, searchTerms),
5
);
}
// search finished, update title and status message
else _finishSearch(resultCount);
};
/**
* 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) => {
const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
const docContent = htmlElement.querySelector('[role="main"]');
if (docContent !== undefined) return docContent.textContent;
console.warn(
"Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you 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.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);
},
/**
* execute search (requires search index to be loaded)
*/
query: (query) => {
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;
// 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]);
// array of [docname, title, anchor, descr, score, filename]
let results = [];
_removeChildren(document.getElementById("search-progress"));
const queryLower = query.toLowerCase();
for (const [title, foundTitles] of Object.entries(allTitles)) {
if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
for (const [file, id] of foundTitles) {
let score = Math.round(100 * queryLower.length / title.length)
results.push([
docNames[file],
titles[file] !== title ? `${titles[file]} > ${title}` : title,
id !== null ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// 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] of foundEntries) {
let score = Math.round(100 * queryLower.length / entry.length)
results.push([
docNames[file],
titles[file],
id ? "#" + id : "",
null,
score,
filenames[file],
]);
}
}
}
// lookup as object
objectTerms.forEach((term) =>
results.push(...Search.performObjectSearch(term, objectTerms))
);
// lookup as search terms in fulltext
results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
// let the scorer override scores with a custom scoring function
if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
// now sort the results by score (in opposite order of appearance, since the
// display function below uses pop() to retrieve items) and then
// alphabetically
results.sort((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;
});
// 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;
}, []);
results = results.reverse();
// for debugging
//Search.lastresults = results.slice(); // a copy
// console.info("search results:", Search.lastresults);
// print the results
_displayNextItem(results, results.length, searchTerms);
},
/**
* 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]],
]);
};
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);
Object.keys(terms).forEach((term) => {
if (term.match(escapedWord) && !terms[word])
arr.push({ files: terms[term], score: Scorer.partialTerm });
});
Object.keys(titleTerms).forEach((term) => {
if (term.match(escapedWord) && !titleTerms[word])
arr.push({ files: titleTerms[word], 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.get(file).indexOf(word) === -1)
fileMap.get(file).push(word);
else fileMap.set(file, [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],
]);
}
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) => {
const text = Search.htmlToText(htmlText);
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);

View File

@@ -0,0 +1,144 @@
/* 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)));
parent.insertBefore(
span,
parent.insertBefore(
document.createTextNode(val.substr(pos + text.length)),
node.nextSibling
)
);
node.nodeValue = val.substr(0, pos);
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(
'<p class="highlight-link">' +
'<a href="javascript:SphinxHighlight.hideSearchWords()">' +
_("Hide Search Matches") +
"</a></p>"
)
);
},
/**
* 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(SphinxHighlight.highlightSearchWords);
_ready(SphinxHighlight.initEscapeListener);

61
docs/build/html/_static/translations.js vendored Normal file
View File

@@ -0,0 +1,61 @@
Documentation.addTranslations({
"locale": "de",
"messages": {
"%(filename)s &#8212; %(docstitle)s": "",
"&#169; <a href=\"%(path)s\">Copyright</a> %(copyright)s.": "",
"&#169; Copyright %(copyright)s.": "",
", in ": ", in ",
"About these documents": "\u00dcber dieses Dokument",
"Automatically generated list of changes in version %(version)s": "Automatisch generierte Liste der \u00c4nderungen in Version %(version)s",
"C API changes": "C API-\u00c4nderungen",
"Changes in Version %(version)s &#8212; %(docstitle)s": "",
"Collapse sidebar": "Seitenleiste einklappen",
"Complete Table of Contents": "Vollst\u00e4ndiges Inhaltsverzeichnis",
"Contents": "Inhalt",
"Copyright": "Copyright",
"Created using <a href=\"https://www.sphinx-doc.org/\">Sphinx</a> %(sphinx_version)s.": "",
"Expand sidebar": "Seitenleiste ausklappen",
"Full index on one page": "Gesamtes Stichwortverzeichnis auf einer Seite",
"General Index": "Stichwortverzeichnis",
"Global Module Index": "Globaler Modulindex",
"Go": "Los",
"Hide Search Matches": "Suchergebnisse ausblenden",
"Index": "Stichwortverzeichnis",
"Index &ndash; %(key)s": "Stichwortverzeichnis &ndash; %(key)s",
"Index pages by letter": "Stichwortverzeichnis nach Anfangsbuchstabe",
"Indices and tables:": "Verzeichnisse und Tabellen:",
"Last updated on %(last_updated)s.": "Zuletzt aktualisiert am %(last_updated)s.",
"Library changes": "Bibliotheks-\u00c4nderungen",
"Navigation": "Navigation",
"Next topic": "N\u00e4chstes Thema",
"Other changes": "Andere \u00c4nderungen",
"Overview": "\u00dcbersicht",
"Please activate JavaScript to enable the search\n functionality.": "Bitte aktivieren Sie JavaScript, wenn Sie die Suchfunktion nutzen wollen.",
"Preparing search...": "Suche wird vorbereitet...",
"Previous topic": "Vorheriges Thema",
"Quick search": "Schnellsuche",
"Search": "Suche",
"Search Page": "Suche",
"Search Results": "Suchergebnisse",
"Search finished, found ${resultCount} page(s) matching the search query.": "",
"Search within %(docstitle)s": "Suche in %(docstitle)s",
"Searching": "Suchen",
"Searching for multiple words only shows matches that contain\n all words.": "",
"Show Source": "Quellcode anzeigen",
"Table of Contents": "Inhaltsverzeichnis",
"This Page": "Diese Seite",
"Welcome! This is": "Willkommen! Dies ist",
"Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories.": "Ihre Suche ergab keine Treffer. Bitte stellen Sie sicher, dass alle W\u00f6rter richtig geschrieben sind und gen\u00fcgend Kategorien ausgew\u00e4hlt sind.",
"all functions, classes, terms": "alle Funktionen, Klassen, Begriffe",
"can be huge": "kann gro\u00df sein",
"last updated": "zuletzt aktualisiert",
"lists all sections and subsections": "Liste aller Kapitel und Unterkapitel",
"next chapter": "n\u00e4chstes Kapitel",
"previous chapter": "vorheriges Kapitel",
"quick access to all modules": "schneller Zugriff auf alle Module",
"search": "suchen",
"search this documentation": "durchsuche diese Dokumentation",
"the documentation for": "die Dokumentation f\u00fcr"
},
"plural_expr": "(n != 1)"
});

108
docs/build/html/genindex.html vendored Normal file
View File

@@ -0,0 +1,108 @@
<!DOCTYPE html>
<html class="writer-html5" lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Stichwortverzeichnis &mdash; Uniper Dokumentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Stichwortverzeichnis" href="#" />
<link rel="search" title="Suche" href="search.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
Uniper
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Dokumentation durchsuchen" aria-label="Dokumentation durchsuchen" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="DUTs.html">DUTs</a></li>
<li class="toctree-l1"><a class="reference internal" href="GVLs.html">GVLs</a></li>
<li class="toctree-l1"><a class="reference internal" href="POUs.html">POUs</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Uniper</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Stichwortverzeichnis</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<h1 id="index">Stichwortverzeichnis</h1>
<div class="genindex-jumpbox">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, M.Heisig.</p>
</div>
Erstellt mit <a href="https://www.sphinx-doc.org/">Sphinx</a> mit einem
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
bereitgestellt von <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

143
docs/build/html/index.html vendored Normal file
View File

@@ -0,0 +1,143 @@
<!DOCTYPE html>
<html class="writer-html5" lang="de">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Welcome to the Uniper documentation! &mdash; Uniper Dokumentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Stichwortverzeichnis" href="genindex.html" />
<link rel="search" title="Suche" href="search.html" />
<link rel="next" title="DUTs" href="DUTs.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="#" class="icon icon-home">
Uniper
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Dokumentation durchsuchen" aria-label="Dokumentation durchsuchen" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="DUTs.html">DUTs</a></li>
<li class="toctree-l1"><a class="reference internal" href="GVLs.html">GVLs</a></li>
<li class="toctree-l1"><a class="reference internal" href="POUs.html">POUs</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="#">Uniper</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="#" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Welcome to the Uniper documentation!</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/index.rst.txt" rel="nofollow"> Quelltext anzeigen</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="welcome-to-the-uniper-documentation">
<h1>Welcome to the Uniper documentation!<a class="headerlink" href="#welcome-to-the-uniper-documentation" title="Permalink to this heading"></a></h1>
<div class="toctree-wrapper compound">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="DUTs.html">DUTs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-battery-status">E_BATTERY_STATUS</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-bms-control-mode">E_BMS_CONTROL_MODE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-bms-state">E_BMS_STATE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-charge-status">E_CHARGE_STATUS</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-cycle-status">E_CYCLE_STATUS</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-reactive-power-type">E_REACTIVE_POWER_TYPE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#e-component-status">E_COMPONENT_STATUS</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-auto-hmi-interface">ST_AUTO_HMI_INTERFACE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-module-hmi-interface">ST_MODULE_HMI_INTERFACE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-module-volt-config">ST_MODULE_VOLT_CONFIG</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-string-hmi-interface">ST_STRING_HMI_INTERFACE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-string-volt-config">ST_STRING_VOLT_CONFIG</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-unit-hmi-interface">ST_UNIT_HMI_INTERFACE</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#st-unit-config">ST_UNIT_CONFIG</a></li>
<li class="toctree-l2"><a class="reference internal" href="DUTs.html#modbus">Modbus</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="GVLs.html">GVLs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="GVLs.html#gvl-config">GVL_CONFIG</a></li>
<li class="toctree-l2"><a class="reference internal" href="GVLs.html#gvl-modbus">GVL_MODBUS</a></li>
<li class="toctree-l2"><a class="reference internal" href="GVLs.html#gvl-scada">GVL_SCADA</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="POUs.html">POUs</a><ul>
<li class="toctree-l2"><a class="reference internal" href="POUs.html#sunspec">Sunspec</a></li>
</ul>
</li>
</ul>
</div>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="DUTs.html" class="btn btn-neutral float-right" title="DUTs" accesskey="n" rel="next">Weiter <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, M.Heisig.</p>
</div>
Erstellt mit <a href="https://www.sphinx-doc.org/">Sphinx</a> mit einem
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
bereitgestellt von <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

6
docs/build/html/objects.inv vendored Normal file
View File

@@ -0,0 +1,6 @@
# Sphinx inventory version 2
# Project: Uniper
# Version:
# The remainder of this file is compressed using zlib.
<EFBFBD><EFBFBD>
<EFBFBD>0E<><45><EFBFBD><EFBFBD>"<22>u]p<>X<EFBFBD><58><EFBFBD>&<26> $<24><>L<EFBFBD><4C><EFBFBD><EFBFBD>lAp<41>;<3B><><19><15><08><>V<EFBFBD><02><><EFBFBD><EFBFBD>k<EFBFBD>ށ<14><>~<7E><><EFBFBD>X~,<16>ω<EFBFBD><31>5pW<70><57><EFBFBD><EFBFBD>4['<27><><<3C><><07>o<EFBFBD><6F><EFBFBD>F񵦭3<F1B5A6AD><33>N<EFBFBD>G`6E<><15><><EFBFBD><1A><>K<EFBFBD>V“<56>q<EFBFBD>je<02><><03><>

123
docs/build/html/search.html vendored Normal file
View File

@@ -0,0 +1,123 @@
<!DOCTYPE html>
<html class="writer-html5" lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Suche &mdash; Uniper Dokumentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css" />
<script src="_static/jquery.js"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
<script src="_static/doctools.js"></script>
<script src="_static/sphinx_highlight.js"></script>
<script src="_static/translations.js"></script>
<script src="_static/js/theme.js"></script>
<script src="_static/searchtools.js"></script>
<script src="_static/language_data.js"></script>
<link rel="index" title="Stichwortverzeichnis" href="genindex.html" />
<link rel="search" title="Suche" href="#" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
Uniper
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="#" method="get">
<input type="text" name="q" placeholder="Dokumentation durchsuchen" aria-label="Dokumentation durchsuchen" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="DUTs.html">DUTs</a></li>
<li class="toctree-l1"><a class="reference internal" href="GVLs.html">GVLs</a></li>
<li class="toctree-l1"><a class="reference internal" href="POUs.html">POUs</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">Uniper</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Suche</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<noscript>
<div id="fallback" class="admonition warning">
<p class="last">
Bitte aktiviere JavaScript, um die Suchfunktion zu nutzen.
</p>
</div>
</noscript>
<div id="search-results">
</div>
</div>
</div>
<footer>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2025, M.Heisig.</p>
</div>
Erstellt mit <a href="https://www.sphinx-doc.org/">Sphinx</a> mit einem
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
bereitgestellt von <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
<script>
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
<script id="searchindexloader"></script>
</body>
</html>

1
docs/build/html/searchindex.js vendored Normal file

File diff suppressed because one or more lines are too long

10
docs/index.rst Normal file
View File

@@ -0,0 +1,10 @@
Welcome to the Uniper documentation!
=======================================
.. toctree::
:maxdepth: 2
:caption: Contents:
DUTs
GVLs
POUs

35
docs/make.bat Normal file
View File

@@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=source
set BUILDDIR=build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

149
docs/source/DUTs.rst Normal file
View File

@@ -0,0 +1,149 @@
***************************
DUTs
***************************
E_BATTERY_STATUS
================================
.. plc:autoenum:: E_BATTERY_STATUS
E_BMS_CONTROL_MODE
================================
.. plc:autoenum:: E_BMS_CONTROL_MODE
E_BMS_STATE
================================
.. plc:autoenum:: E_BMS_STATE
E_CHARGE_STATUS
================================
.. plc:autoenum:: E_CHARGE_STATUS
E_CYCLE_STATUS
================================
.. plc:autoenum:: E_CYCLE_STATUS
E_REACTIVE_POWER_TYPE
================================
.. plc:autoenum:: E_REACTIVE_POWER_TYPE
E_COMPONENT_STATUS
================================
.. plc:autoenum:: E_COMPONENT_STATUS
ST_AUTO_HMI_INTERFACE
================================
.. plc:autostruct:: ST_AUTO_HMI_INTERFACE
ST_MODULE_HMI_INTERFACE
================================
.. plc:autostruct:: ST_MODULE_HMI_INTERFACE
ST_MODULE_VOLT_CONFIG
================================
.. plc:autostruct:: ST_MODULE_VOLT_CONFIG
ST_STRING_HMI_INTERFACE
================================
.. plc:autostruct:: ST_STRING_HMI_INTERFACE
ST_STRING_VOLT_CONFIG
================================
.. plc:autostruct:: ST_STRING_VOLT_CONFIG
ST_UNIT_HMI_INTERFACE
================================
.. plc:autostruct:: ST_UNIT_HMI_INTERFACE
ST_UNIT_CONFIG
================================
.. plc:autostruct:: ST_UNIT_CONFIG
Modbus
================================
ST_EMS_MODBUS_INTERFACE
---------------------------------
.. plc:autostruct:: ST_EMS_MODBUS_INTERFACE
ErrorWarningRegisters
---------------------------------
ST_DWORD_UNIT_ERROR_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_DWORD_UNIT_ERROR_BITMAP
ST_DWORD_UNIT_WARNING_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_DWORD_UNIT_WARNING_BITMAP
ST_WORD_BMS_ERROR_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_WORD_BMS_ERROR_BITMAP
ST_WORD_BMS_WARNING_BITMAP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_WORD_BMS_WARNING_BITMAP
U_BMS_ERROR_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_BMS_ERROR_REGISTER
U_BMS_WARNING_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_BMS_WARNING_REGISTER
U_UNIT_ERROR_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_UNIT_ERROR_REGISTER
U_UNIT_WARNING_REGISTER
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autoenum:: U_UNIT_WARNING_REGISTER
HoldingRegisters
---------------------------------
ST_MODBUS_REG_10
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_10
ST_MODBUS_REG_11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_11
ST_MODBUS_REG_12
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_12
ST_MODBUS_REG_13
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_MODBUS_REG_13

20
docs/source/GVLs.rst Normal file
View File

@@ -0,0 +1,20 @@
***************************
GVLs
***************************
GVL_CONFIG
================================
.. plc:autogvl:: GVL_CONFIG
GVL_MODBUS
================================
.. plc:autogvl:: GVL_MODBUS
GVL_SCADA
================================
.. plc:autogvl:: GVL_SCADA

69
docs/source/POUs.rst Normal file
View File

@@ -0,0 +1,69 @@
***************************
POUs
***************************
.. plc:autofunctionblock:: FB_Module
:members:
.. plc:autofunctionblock:: FB_PowerMeter
.. plc:autofunctionblock:: FB_Safety
.. plc:autofunctionblock:: FB_String
:members:
.. plc:autofunctionblock:: FB_UMD705
.. plc:autofunctionblock:: FB_Unit
:members:
.. plc:autoprogram:: MAIN
Sunspec
================================
.. plc:autofunctionblock:: FB_PowerSupplySunspec
:members:
ST_SUNSPEC_CURRENT_VALUES
---------------------------------
.. plc:autostruct:: ST_SUNSPEC_CURRENT_VALUES
U_SUNSPEC_ERROR
---------------------------------
.. plc:autoenum:: U_SUNSPEC_ERROR
ModelData
---------------------------------
ST_SunspecInverterThreePhase
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_SunspecInverterThreePhase
ST_SunspecNameplateRatings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autostruct:: ST_SunspecNameplateRatings
StatePattern
---------------------------------
StateEvents
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autofunctionblock:: I_SunspecStateEvents
:members:
States
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. plc:autofunctionblock:: FB_SunspecErrorState
:members:
.. plc:autofunctionblock:: FB_SunspecOffState
:members:

33
docs/source/conf.py Normal file
View File

@@ -0,0 +1,33 @@
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
project = 'Uniper'
copyright = '2025, M.Heisig'
author = 'M.Heisig'
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
extensions = ['plcdoc', "sphinx.ext.autodoc"]
plc_project = 'C:/Users/Public/Documents/uniblu/PLC/PLC.plcproj'
#rst_file_destination = "C:/Users/Public/Documents/uniblu/docs/source/"
rst_file_destination = ""
templates_path = ['_templates']
exclude_patterns = []
language = 'de'
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
html_theme = 'sphinx_rtd_theme'
html_static_path = ['_static']
nitpicky = True

10
docs/source/index.rst Normal file
View File

@@ -0,0 +1,10 @@
Welcome to the Uniper documentation!
=======================================
.. toctree::
:maxdepth: 2
:caption: Contents:
DUTs
GVLs
POUs