diff --git a/CHANGELOG.md b/CHANGELOG.md
index 67e48af..2162ad4 100755
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,6 @@
## CHANGELOG
-### v0.1.5
+### v0.1.5 (2020-01-09)
* New array_length command
* ForIn accepts handle value not variable name
diff --git a/docs/api/duckscript/COPYRIGHT.txt b/docs/api/duckscript/COPYRIGHT.txt
new file mode 100644
index 0000000..af77776
--- /dev/null
+++ b/docs/api/duckscript/COPYRIGHT.txt
@@ -0,0 +1,45 @@
+These documentation pages include resources by third parties. This copyright
+file applies only to those resources. The following third party resources are
+included, and carry their own copyright notices and license terms:
+
+* Fira Sans (FiraSans-Regular.woff, FiraSans-Medium.woff):
+
+ Copyright (c) 2014, Mozilla Foundation https://mozilla.org/
+ with Reserved Font Name Fira Sans.
+
+ Copyright (c) 2014, Telefonica S.A.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See FiraSans-LICENSE.txt.
+
+* rustdoc.css, main.js, and playpen.js:
+
+ Copyright 2015 The Rust Developers.
+ Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or
+ the MIT license (LICENSE-MIT.txt) at your option.
+
+* normalize.css:
+
+ Copyright (c) Nicolas Gallagher and Jonathan Neal.
+ Licensed under the MIT license (see LICENSE-MIT.txt).
+
+* Source Code Pro (SourceCodePro-Regular.woff, SourceCodePro-Semibold.woff):
+
+ Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/),
+ with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark
+ of Adobe Systems Incorporated in the United States and/or other countries.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See SourceCodePro-LICENSE.txt.
+
+* Source Serif Pro (SourceSerifPro-Regular.ttf.woff,
+ SourceSerifPro-Bold.ttf.woff, SourceSerifPro-It.ttf.woff):
+
+ Copyright 2014 Adobe Systems Incorporated (http://www.adobe.com/), with
+ Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of
+ Adobe Systems Incorporated in the United States and/or other countries.
+
+ Licensed under the SIL Open Font License, Version 1.1.
+ See SourceSerifPro-LICENSE.txt.
+
+This copyright file is intended to be distributed with rustdoc output.
diff --git a/docs/api/duckscript/FiraSans-LICENSE.txt b/docs/api/duckscript/FiraSans-LICENSE.txt
new file mode 100644
index 0000000..d444ea9
--- /dev/null
+++ b/docs/api/duckscript/FiraSans-LICENSE.txt
@@ -0,0 +1,94 @@
+Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A.
+with Reserved Font Name < Fira >,
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/docs/api/duckscript/FiraSans-Medium.woff b/docs/api/duckscript/FiraSans-Medium.woff
new file mode 100644
index 0000000..7d742c5
Binary files /dev/null and b/docs/api/duckscript/FiraSans-Medium.woff differ
diff --git a/docs/api/duckscript/FiraSans-Regular.woff b/docs/api/duckscript/FiraSans-Regular.woff
new file mode 100644
index 0000000..d8e0363
Binary files /dev/null and b/docs/api/duckscript/FiraSans-Regular.woff differ
diff --git a/docs/api/duckscript/LICENSE-APACHE.txt b/docs/api/duckscript/LICENSE-APACHE.txt
new file mode 100644
index 0000000..16fe87b
--- /dev/null
+++ b/docs/api/duckscript/LICENSE-APACHE.txt
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
diff --git a/docs/api/duckscript/LICENSE-MIT.txt b/docs/api/duckscript/LICENSE-MIT.txt
new file mode 100644
index 0000000..31aa793
--- /dev/null
+++ b/docs/api/duckscript/LICENSE-MIT.txt
@@ -0,0 +1,23 @@
+Permission is hereby granted, free of charge, to any
+person obtaining a copy of this software and associated
+documentation files (the "Software"), to deal in the
+Software without restriction, including without
+limitation the rights to use, copy, modify, merge,
+publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software
+is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice
+shall be included in all copies or substantial portions
+of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.
diff --git a/docs/api/duckscript/SourceCodePro-LICENSE.txt b/docs/api/duckscript/SourceCodePro-LICENSE.txt
new file mode 100644
index 0000000..0754257
--- /dev/null
+++ b/docs/api/duckscript/SourceCodePro-LICENSE.txt
@@ -0,0 +1,93 @@
+Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/docs/api/duckscript/SourceCodePro-Regular.woff b/docs/api/duckscript/SourceCodePro-Regular.woff
new file mode 100644
index 0000000..5576670
Binary files /dev/null and b/docs/api/duckscript/SourceCodePro-Regular.woff differ
diff --git a/docs/api/duckscript/SourceCodePro-Semibold.woff b/docs/api/duckscript/SourceCodePro-Semibold.woff
new file mode 100644
index 0000000..ca972a1
Binary files /dev/null and b/docs/api/duckscript/SourceCodePro-Semibold.woff differ
diff --git a/docs/api/duckscript/SourceSerifPro-Bold.ttf.woff b/docs/api/duckscript/SourceSerifPro-Bold.ttf.woff
new file mode 100644
index 0000000..ca25431
Binary files /dev/null and b/docs/api/duckscript/SourceSerifPro-Bold.ttf.woff differ
diff --git a/docs/api/duckscript/SourceSerifPro-It.ttf.woff b/docs/api/duckscript/SourceSerifPro-It.ttf.woff
new file mode 100644
index 0000000..a287bbe
Binary files /dev/null and b/docs/api/duckscript/SourceSerifPro-It.ttf.woff differ
diff --git a/docs/api/duckscript/SourceSerifPro-LICENSE.md b/docs/api/duckscript/SourceSerifPro-LICENSE.md
new file mode 100644
index 0000000..22cb755
--- /dev/null
+++ b/docs/api/duckscript/SourceSerifPro-LICENSE.md
@@ -0,0 +1,93 @@
+Copyright 2014-2018 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/docs/api/duckscript/SourceSerifPro-Regular.ttf.woff b/docs/api/duckscript/SourceSerifPro-Regular.ttf.woff
new file mode 100644
index 0000000..a3d55cf
Binary files /dev/null and b/docs/api/duckscript/SourceSerifPro-Regular.ttf.woff differ
diff --git a/docs/api/duckscript/aliases.js b/docs/api/duckscript/aliases.js
new file mode 100644
index 0000000..cc5d7a5
--- /dev/null
+++ b/docs/api/duckscript/aliases.js
@@ -0,0 +1,2 @@
+var ALIASES = {};
+ALIASES["duckscript"] = {};
diff --git a/docs/api/duckscript/brush.svg b/docs/api/duckscript/brush.svg
new file mode 100644
index 0000000..072264a
--- /dev/null
+++ b/docs/api/duckscript/brush.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/api/duckscript/dark.css b/docs/api/duckscript/dark.css
new file mode 100644
index 0000000..0f090c4
--- /dev/null
+++ b/docs/api/duckscript/dark.css
@@ -0,0 +1 @@
+body{background-color:#353535;color:#ddd;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom-color:#DDD;}.docblock table,.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.content .highlighted{color:#eee !important;background-color:#616161;}.content .highlighted a,.content .highlighted span{color:#eee !important;}.content .highlighted.trait{background-color:#013191;}.content .highlighted.traitalias{background-color:#013191;}.content .highlighted.mod,.content .highlighted.externcrate{background-color:#afc6e4;}.content .highlighted.mod{background-color:#803a1b;}.content .highlighted.externcrate{background-color:#396bac;}.content .highlighted.enum{background-color:#5b4e68;}.content .highlighted.struct{background-color:#194e9f;}.content .highlighted.union{background-color:#b7bd49;}.content .highlighted.fn,.content .highlighted.method,.content .highlighted.tymethod{background-color:#4950ed;}.content .highlighted.type{background-color:#38902c;}.content .highlighted.foreigntype{background-color:#b200d6;}.content .highlighted.attr,.content .highlighted.derive,.content .highlighted.macro{background-color:#217d1c;}.content .highlighted.constant,.content .highlighted.static{background-color:#0063cc;}.content .highlighted.primitive{background-color:#00708a;}.content .highlighted.keyword{background-color:#884719;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b397da;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav{border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#ddd;}.docblock:not(.type-decl) a:not(.srclink):not(.test-arrow),.docblock-short a:not(.srclink):not(.test-arrow),.stability a{color:#D2991D;}.stab.internal a{color:#304FFE;}a.test-arrow{color:#dedede;}.collapse-toggle{color:#999;}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.internal{background:#FFB9B3;border-color:#B71C1C;color:#2f2f2f;}.stab.deprecated{background:#F3DFFF;border-color:#7F0087;color:#2f2f2f;}.stab.portability{background:#C4ECFF;border-color:#7BA5DB;color:#2f2f2f;}.stab.portability>code{color:#ddd;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);color:black;}.since{color:grey;}tr.result span.primitive::after,tr.result span.keyword::after{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label{color:#999;}:target>code,:target>.in-band{background-color:#494a3d;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.6);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.6);}.information>.compile_fail:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:rgba(255,142,0,1);}.search-failed a{color:#0089ff;}.tooltip .tooltiptext{background-color:black;color:#fff;}.tooltip .tooltiptext::after{border-color:transparent black transparent transparent;}.important-traits .tooltip .tooltiptext{background-color:white;color:black;border-color:black;}#titles>div:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>div:hover,#titles>div.selected{border-top-color:#0089ff;}#titles>div>div.count{color:#888;}.modal{background-color:rgba(0,0,0,0.3);}.modal-content{background-color:#272727;border-color:#999;}.modal-content>.close{background-color:#272727;border-color:#999;}.modal-content>.close:hover{background-color:#ff1f1f;color:white;}.modal-content>.whiter{background-color:#272727;}.modal-content>.close:hover+.whiter{background-color:#ff1f1f;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu{border-color:#e0e0e0;background:#f0f0f0;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus{border-color:#ffb900;}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results td span.alias{color:#fff;}.search-results td span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}
\ No newline at end of file
diff --git a/docs/api/duckscript/down-arrow.svg b/docs/api/duckscript/down-arrow.svg
new file mode 100644
index 0000000..c0f59f0
--- /dev/null
+++ b/docs/api/duckscript/down-arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/all.html b/docs/api/duckscript/duckscript/all.html
new file mode 100644
index 0000000..2e19187
--- /dev/null
+++ b/docs/api/duckscript/duckscript/all.html
@@ -0,0 +1,3 @@
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/index.html b/docs/api/duckscript/duckscript/index.html
new file mode 100644
index 0000000..56e12dc
--- /dev/null
+++ b/docs/api/duckscript/duckscript/index.html
@@ -0,0 +1,19 @@
+duckscript - Rust
Simple, extendable and embeddable scripting language.
+
This library is the actual script parser and runner.
+On it's own, it has no actual commands as those need to be provided externally (see duckscript_sdk).
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/parser/fn.parse_file.html b/docs/api/duckscript/duckscript/parser/fn.parse_file.html
new file mode 100644
index 0000000..7329daf
--- /dev/null
+++ b/docs/api/duckscript/duckscript/parser/fn.parse_file.html
@@ -0,0 +1,2 @@
+duckscript::parser::parse_file - Rust
parses the file and returns a vector of instructions
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/parser/fn.parse_text.html b/docs/api/duckscript/duckscript/parser/fn.parse_text.html
new file mode 100644
index 0000000..4c73199
--- /dev/null
+++ b/docs/api/duckscript/duckscript/parser/fn.parse_text.html
@@ -0,0 +1,2 @@
+duckscript::parser::parse_text - Rust
parses the provided script text and returns a vector of instructions
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/parser/index.html b/docs/api/duckscript/duckscript/parser/index.html
new file mode 100644
index 0000000..db81439
--- /dev/null
+++ b/docs/api/duckscript/duckscript/parser/index.html
@@ -0,0 +1,6 @@
+duckscript::parser - Rust
parses the provided script text and returns a vector of instructions
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/parser/sidebar-items.js b/docs/api/duckscript/duckscript/parser/sidebar-items.js
new file mode 100644
index 0000000..84f6ab1
--- /dev/null
+++ b/docs/api/duckscript/duckscript/parser/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["parse_file","parses the file and returns a vector of instructions"],["parse_text","parses the provided script text and returns a vector of instructions"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/runner/fn.run_instruction.html b/docs/api/duckscript/duckscript/runner/fn.run_instruction.html
new file mode 100644
index 0000000..87e7d8a
--- /dev/null
+++ b/docs/api/duckscript/duckscript/runner/fn.run_instruction.html
@@ -0,0 +1,2 @@
+duckscript::runner::run_instruction - Rust
Enables to evaluate a single instruction and return its result.
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/runner/fn.run_script.html b/docs/api/duckscript/duckscript/runner/fn.run_script.html
new file mode 100644
index 0000000..1eb911a
--- /dev/null
+++ b/docs/api/duckscript/duckscript/runner/fn.run_script.html
@@ -0,0 +1,2 @@
+duckscript::runner::run_script - Rust
Executes the provided script with the given context
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/runner/fn.run_script_file.html b/docs/api/duckscript/duckscript/runner/fn.run_script_file.html
new file mode 100644
index 0000000..8ef99d0
--- /dev/null
+++ b/docs/api/duckscript/duckscript/runner/fn.run_script_file.html
@@ -0,0 +1,2 @@
+duckscript::runner::run_script_file - Rust
Executes the provided script file with the given context
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/runner/index.html b/docs/api/duckscript/duckscript/runner/index.html
new file mode 100644
index 0000000..3b75e32
--- /dev/null
+++ b/docs/api/duckscript/duckscript/runner/index.html
@@ -0,0 +1,7 @@
+duckscript::runner - Rust
Executes the provided script file with the given context
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/runner/sidebar-items.js b/docs/api/duckscript/duckscript/runner/sidebar-items.js
new file mode 100644
index 0000000..6dae191
--- /dev/null
+++ b/docs/api/duckscript/duckscript/runner/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"fn":[["run_instruction","Enables to evaluate a single instruction and return its result."],["run_script","Executes the provided script with the given context"],["run_script_file","Executes the provided script file with the given context"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/sidebar-items.js b/docs/api/duckscript/duckscript/sidebar-items.js
new file mode 100644
index 0000000..66be98c
--- /dev/null
+++ b/docs/api/duckscript/duckscript/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"mod":[["parser","parser"],["runner","runner"],["types","types"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/command/enum.CommandResult.html b/docs/api/duckscript/duckscript/types/command/enum.CommandResult.html
new file mode 100644
index 0000000..1899828
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/command/enum.CommandResult.html
@@ -0,0 +1,31 @@
+duckscript::types::command::CommandResult - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/command/enum.GoToValue.html b/docs/api/duckscript/duckscript/types/command/enum.GoToValue.html
new file mode 100644
index 0000000..c11da2c
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/command/enum.GoToValue.html
@@ -0,0 +1,25 @@
+duckscript::types::command::GoToValue - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/command/index.html b/docs/api/duckscript/duckscript/types/command/index.html
new file mode 100644
index 0000000..1fc1412
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/command/index.html
@@ -0,0 +1,10 @@
+duckscript::types::command - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/command/sidebar-items.js b/docs/api/duckscript/duckscript/types/command/sidebar-items.js
new file mode 100644
index 0000000..25d9766
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/command/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["CommandResult","Command execution result"],["GoToValue","GoTo type value"]],"struct":[["Commands","Holds and enables access to the runtime commands implementations"]],"trait":[["Command","Defines the command capabilities"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/command/struct.Commands.html b/docs/api/duckscript/duckscript/types/command/struct.Commands.html
new file mode 100644
index 0000000..d7aa64a
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/command/struct.Commands.html
@@ -0,0 +1,28 @@
+duckscript::types::command::Commands - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/command/trait.Command.html b/docs/api/duckscript/duckscript/types/command/trait.Command.html
new file mode 100644
index 0000000..77b7f1e
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/command/trait.Command.html
@@ -0,0 +1,31 @@
+duckscript::types::command::Command - Rust
state - Internal state which is only used by commands to store/pull data
+
variables - All script variables
+
output_variable - The output variable name (if defined)
+
instructions - The entire list of instructions which make up the currently running script
+
commands - The currently known commands
+
line - The current instruction line number (global line number after including all scripts into one global script)
+
+
Loading content...
+
Implementors
Loading content...
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/error/enum.ErrorInfo.html b/docs/api/duckscript/duckscript/types/error/enum.ErrorInfo.html
new file mode 100644
index 0000000..4b20404
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/error/enum.ErrorInfo.html
@@ -0,0 +1,39 @@
+duckscript::types::error::ErrorInfo - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/error/index.html b/docs/api/duckscript/duckscript/types/error/index.html
new file mode 100644
index 0000000..5e2bed5
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/error/index.html
@@ -0,0 +1,7 @@
+duckscript::types::error - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/error/sidebar-items.js b/docs/api/duckscript/duckscript/types/error/sidebar-items.js
new file mode 100644
index 0000000..72c1f18
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/error/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["ErrorInfo","Holds the error information"]],"struct":[["ScriptError","Script error struct"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/error/struct.ScriptError.html b/docs/api/duckscript/duckscript/types/error/struct.ScriptError.html
new file mode 100644
index 0000000..2876e66
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/error/struct.ScriptError.html
@@ -0,0 +1,18 @@
+duckscript::types::error::ScriptError - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/index.html b/docs/api/duckscript/duckscript/types/index.html
new file mode 100644
index 0000000..24ad9e6
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/index.html
@@ -0,0 +1,8 @@
+duckscript::types - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/enum.InstructionType.html b/docs/api/duckscript/duckscript/types/instruction/enum.InstructionType.html
new file mode 100644
index 0000000..571ef71
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/enum.InstructionType.html
@@ -0,0 +1,27 @@
+duckscript::types::instruction::InstructionType - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/index.html b/docs/api/duckscript/duckscript/types/instruction/index.html
new file mode 100644
index 0000000..0d5189b
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/index.html
@@ -0,0 +1,10 @@
+duckscript::types::instruction - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/sidebar-items.js b/docs/api/duckscript/duckscript/types/instruction/sidebar-items.js
new file mode 100644
index 0000000..99fac17
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["InstructionType","Instruction Type - script, preprocess"]],"struct":[["Instruction","Instruction data"],["InstructionMetaInfo","Meta information for all instruction types"],["PreProcessInstruction","Preprocess instruction"],["ScriptInstruction","Runtime script instruction"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/struct.Instruction.html b/docs/api/duckscript/duckscript/types/instruction/struct.Instruction.html
new file mode 100644
index 0000000..72a0cf2
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/struct.Instruction.html
@@ -0,0 +1,24 @@
+duckscript::types::instruction::Instruction - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/struct.InstructionMetaInfo.html b/docs/api/duckscript/duckscript/types/instruction/struct.InstructionMetaInfo.html
new file mode 100644
index 0000000..4d901aa
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/struct.InstructionMetaInfo.html
@@ -0,0 +1,25 @@
+duckscript::types::instruction::InstructionMetaInfo - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/struct.PreProcessInstruction.html b/docs/api/duckscript/duckscript/types/instruction/struct.PreProcessInstruction.html
new file mode 100644
index 0000000..81ae691
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/struct.PreProcessInstruction.html
@@ -0,0 +1,25 @@
+duckscript::types::instruction::PreProcessInstruction - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/instruction/struct.ScriptInstruction.html b/docs/api/duckscript/duckscript/types/instruction/struct.ScriptInstruction.html
new file mode 100644
index 0000000..ccda11f
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/instruction/struct.ScriptInstruction.html
@@ -0,0 +1,29 @@
+duckscript::types::instruction::ScriptInstruction - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/runtime/enum.StateValue.html b/docs/api/duckscript/duckscript/types/runtime/enum.StateValue.html
new file mode 100644
index 0000000..df29514
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/runtime/enum.StateValue.html
@@ -0,0 +1,41 @@
+duckscript::types::runtime::StateValue - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/runtime/index.html b/docs/api/duckscript/duckscript/types/runtime/index.html
new file mode 100644
index 0000000..6a5a17c
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/runtime/index.html
@@ -0,0 +1,8 @@
+duckscript::types::runtime - Rust
enum defining what values can be stored in the state map
+
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/runtime/sidebar-items.js b/docs/api/duckscript/duckscript/types/runtime/sidebar-items.js
new file mode 100644
index 0000000..35a9648
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/runtime/sidebar-items.js
@@ -0,0 +1 @@
+initSidebarItems({"enum":[["StateValue","enum defining what values can be stored in the state map"]],"struct":[["Context","The context structure"],["Runtime","The runtime structure"]]});
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/runtime/struct.Context.html b/docs/api/duckscript/duckscript/types/runtime/struct.Context.html
new file mode 100644
index 0000000..dd436a9
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/runtime/struct.Context.html
@@ -0,0 +1,20 @@
+duckscript::types::runtime::Context - Rust
\ No newline at end of file
diff --git a/docs/api/duckscript/duckscript/types/runtime/struct.Runtime.html b/docs/api/duckscript/duckscript/types/runtime/struct.Runtime.html
new file mode 100644
index 0000000..12e6adb
--- /dev/null
+++ b/docs/api/duckscript/duckscript/types/runtime/struct.Runtime.html
@@ -0,0 +1,20 @@
+duckscript::types::runtime::Runtime - Rust
";}var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(hasClass(sidebar,"mobile")===true){hideSidebar();}else{showSidebar();}};}window.onresize=function(){hideSidebar();};autoCollapse(getPageId(),getCurrentValue("rustdoc-collapse")==="true");if(window.location.hash&&window.location.hash.length>0){expandSection(window.location.hash.replace(/^#/,""));}if(main){onEachLazy(main.getElementsByClassName("loading-content"),function(e){e.remove();});onEachLazy(main.childNodes,function(e){if(e.tagName==="H2"||e.tagName==="H3"){var nextTagName=e.nextElementSibling.tagName;if(nextTagName=="H2"||nextTagName=="H3"){e.nextElementSibling.style.display="flex";}else{e.nextElementSibling.style.display="block";}}});}function addSearchOptions(crates){var elem=document.getElementById('crate-search');if(!elem){return;}var crates_text=[];if(Object.keys(crates).length>1){for(var crate in crates){if(crates.hasOwnProperty(crate)){crates_text.push(crate);}}}crates_text.sort(function(a,b){var lower_a=a.toLowerCase();var lower_b=b.toLowerCase();if(lower_alower_b){return 1;}return 0;});for(var i=0;ih2+div,#main>h2+h3,#main>h3+div{display:block;}.loading-content{display:none;}
\ No newline at end of file
diff --git a/docs/api/duckscript/rust-logo.png b/docs/api/duckscript/rust-logo.png
new file mode 100644
index 0000000..46f0999
Binary files /dev/null and b/docs/api/duckscript/rust-logo.png differ
diff --git a/docs/api/duckscript/rustdoc.css b/docs/api/duckscript/rustdoc.css
new file mode 100644
index 0000000..c0f75a4
--- /dev/null
+++ b/docs/api/duckscript/rustdoc.css
@@ -0,0 +1 @@
+ @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff") format('woff');}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff") format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:400;src:local('Source Serif Pro'),url("SourceSerifPro-Regular.ttf.woff") format('woff');}@font-face {font-family:'Source Serif Pro';font-style:italic;font-weight:400;src:local('Source Serif Pro Italic'),url("SourceSerifPro-It.ttf.woff") format('woff');}@font-face {font-family:'Source Serif Pro';font-style:normal;font-weight:700;src:local('Source Serif Pro Bold'),url("SourceSerifPro-Bold.ttf.woff") format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.woff") format('woff');}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.woff") format('woff');}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}body{font:16px/1.4 "Source Serif Pro",serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3:not(.impl):not(.method):not(.type):not(.tymethod):not(.important),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){font-weight:500;margin:20px 0 15px 0;padding-bottom:6px;}h1.fqn{border-bottom:1px dashed;margin-top:0;}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod):not(.associatedconstant){border-bottom:1px solid;}h3.impl,h3.method,h4.method,h3.type,h4.type,h4.associatedconstant{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}h3.impl,h3.method,h3.type{padding-left:15px;}h1,h2,h3,h4,.sidebar,a.source,.search-input,.content table :not(code)>a,.collapse-toggle,div.item-list .out-of-band,#source-sidebar,#sidebar-toggle{font-family:"Fira Sans",sans-serif;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}code,pre{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code,.docblock code.spotlight{padding:0;}.docblock code.spotlight :last-child{padding-bottom:0.6em;}pre{padding:14px;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;min-width:70em;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;height:100vh;overflow:auto;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.js-only,.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-child{font-weight:500;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{margin-top:0;margin-bottom:8px;text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc:not(.source) .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;border-top-left-radius:5px;border-bottom-left-radius:5px;padding:13px 8px;text-align:right;}.rustdoc:not(.source) .example-wrap>pre.rust{width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results{position:absolute;right:0;left:0;overflow:auto;}#results>table{width:100%;table-layout:fixed;}.content pre.line-numbers{float:left;border:none;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short p{display:inline;}.docblock-short.nowrap{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock-short code{white-space:pre-wrap;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5{border-bottom:1px solid;}#main>.docblock h1{font-size:1.3em;}#main>.docblock h2{font-size:1.15em;}#main>.docblock h3,#main>.docblock h4,#main>.docblock h5{font-size:1em;}#main>h2+div,#main>h2+h3,#main>h3+div{display:none;flex-wrap:wrap;}.docblock h1{font-size:1em;}.docblock h2{font-size:0.95em;}.docblock h3,.docblock h4,.docblock h5{font-size:0.9em;}.docblock{margin-left:24px;position:relative;}.content .out-of-band{float:right;font-size:23px;margin:0px;padding:0px;font-weight:normal;}h3.impl>.out-of-band{font-size:21px;}h4.method>.out-of-band{font-size:19px;}h4>code,h3>code,.invisible>code{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{margin:0px;padding:0px;}.in-band>code{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);border:1px dashed;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content .method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.important-traits){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items>h4{border-bottom:0;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.toggle-wrapper.marg-left>.collapse-toggle{left:-24px;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .stability code{font-size:90%;}.content .stability{position:relative;margin-left:33px;margin-top:-13px;}.sub-variant>div>.stability{margin-top:initial;}.content .stability::before{content:'˪';font-size:30px;position:absolute;top:-9px;left:-13px;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{margin-left:20px;}.content .impl-items .docblock,.content .impl-items .stability{margin-bottom:.6em;}.content .impl-items>.stability{margin-left:40px;}.methods>.stability,.content .impl-items>.stability{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.stability{margin-top:0;}nav{border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-7px;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-28px;padding-right:10px;}.anchor:before{content:'\2002\00a7\2002';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.stability a{text-decoration:underline;}.invisible>.srclink,h4>code+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 34px);}#crate-search{margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results .desc{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results a{display:block;}.content .search-results td:first-child{padding-right:0;width:50%;}.content .search-results td:first-child a{padding-right:10px;}.content .search-results td:first-child a:after{clear:both;content:"";display:block;}.content .search-results td:first-child a span{float:left;}tr.result span.primitive::after{content:' (primitive type)';font-style:italic;}tr.result span.keyword::after{content:' (keyword)';font-style:italic;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:20px;padding-left:17px;}.stab{display:table;border-width:1px;border-style:solid;padding:3px;margin-bottom:5px;font-size:90%;}.stab p{display:inline;}.stab summary{display:list-item;}.stab .emoji{font-size:1.5em;}.module-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-right:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;position:absolute;right:0;top:0;}.impl-items .since,.impl .since{flex-grow:0;padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink{flex-grow:0;font-size:17px;font-weight:normal;}.impl-items code,.impl code{flex-grow:1;}.impl-items h4,h4.impl,h3.impl{display:flex;flex-basis:100%;font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.section-header a{color:inherit;}.collapse-toggle{font-weight:300;position:absolute;left:-23px;top:0;}h3>.collapse-toggle,h4>.collapse-toggle{font-size:0.8em;top:5px;}.toggle-wrapper>.collapse-toggle{left:-24px;margin-top:0px;}.toggle-wrapper{position:relative;margin-top:0;}.toggle-wrapper.collapsed{height:25px;transition:height .2s;margin-bottom:.6em;}.collapse-toggle>.inner{display:inline-block;width:1.2ch;text-align:center;}.collapse-toggle.hidden-default{position:relative;margin-left:20px;}.since+.srclink{display:table-cell;padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}.toggle-wrapper>.collapse-toggle{left:0;}.variant+.toggle-wrapper+.docblock>p{margin-top:5px;}.sub-variant,.sub-variant>h3{margin-top:1px !important;}#main>.sub-variant>h3{font-size:15px;margin-left:25px;margin-bottom:5px;}.sub-variant>div{margin-left:20px;margin-bottom:10px;}.sub-variant>div>span{display:block;position:relative;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.enum>.toggle-wrapper+.docblock,.struct>.toggle-wrapper+.docblock{margin-left:30px;margin-bottom:20px;margin-top:5px;}.docblock>.section-header:first-child{margin-left:15px;margin-top:0;}.docblock>.section-header:first-child:hover>a:before{left:-10px;}.enum>.collapsed,.struct>.collapsed{margin-bottom:25px;}#main>.variant,#main>.structfield{display:block;}.attributes{display:block;margin-top:0px !important;margin-right:0px;margin-bottom:0px !important;margin-left:30px;}.toggle-attributes.collapsed{margin-bottom:0;}.impl-items>.toggle-attributes{margin-left:20px;}.impl-items .attributes{font-weight:500;}:target>code{opacity:1;}.information{position:absolute;left:-20px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip .tooltiptext{width:120px;display:none;text-align:center;padding:5px 3px;border-radius:6px;margin-left:5px;top:-5px;left:105%;z-index:10;}.tooltip:hover .tooltiptext{display:inline;}.tooltip .tooltiptext::after{content:" ";position:absolute;top:50%;left:11px;margin-top:-5px;border-width:5px;border-style:solid;}.important-traits .tooltip .tooltiptext{border:1px solid;}pre.rust{position:relative;tab-width:4;-moz-tab-width:4;}.search-failed{text-align:center;margin-top:20px;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>div{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border-top:2px solid;}#titles>div:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>div>div.count{display:inline-block;font-size:16px;}.important-traits{cursor:pointer;z-index:2;}h4>.important-traits{position:absolute;left:-44px;top:2px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu{position:absolute;right:0;top:10px;outline:none;}#theme-picker,#settings-menu{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;left:0;top:45px;bottom:0;overflow-y:auto;border-right:1px solid;display:none;}.sidebar>.block.version{border-bottom:none;margin-top:12px;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main{margin-top:45px;padding:0;}.content .in-band{width:100%;}.content h4>.out-of-band{position:inherit;}.toggle-wrapper>.collapse-toggle{left:0px;}.toggle-wrapper{height:1.5em;}#search{margin-left:0;}.content .impl-items .method,.content .impl-items>.type,.impl-items>.associatedconstant{display:flex;}.anchor{display:none !important;}h1.fqn{overflow:initial;}.theme-picker{left:10px;top:54px;z-index:1;}h4>.important-traits{position:absolute;left:-22px;top:24px;}#titles>div>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar{width:calc(100% + 30px);}.show-it{display:block;width:246px;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}.collapse-toggle{left:-20px;}.impl>.collapse-toggle{left:-10px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}}@media print{nav.sub,.content .out-of-band,.collapse-toggle{display:none;}}@media (max-width:416px){#titles{height:73px;}#titles>div{height:73px;}}.modal{position:fixed;width:100vw;height:100vh;z-index:10000;top:0;left:0;}.modal-content{display:block;max-width:60%;min-width:200px;padding:8px;top:40%;position:absolute;left:50%;transform:translate(-50%,-40%);border:1px solid;border-radius:4px;border-top-right-radius:0;}.modal-content>.docblock{margin:0;}h3.important{margin:0;margin-bottom:13px;font-size:19px;}.modal-content>.docblock>code.content{margin:0;padding:0;font-size:20px;}.modal-content>.close{position:absolute;font-weight:900;right:-25px;top:-1px;font-size:18px;width:25px;padding-right:2px;border-top-right-radius:5px;border-bottom-right-radius:5px;text-align:center;border:1px solid;border-right:0;cursor:pointer;}.modal-content>.whiter{height:25px;position:absolute;width:3px;right:-2px;top:0px;}#main>div.important-traits{position:absolute;left:-24px;margin-top:16px;}.content>.methods>.method>div.important-traits{position:absolute;font-weight:400;left:-42px;margin-top:2px;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}.type-decl>pre>.toggle-wrapper.toggle-attributes.top-attr{margin-left:0 !important;}.type-decl>pre>.docblock.attributes.top-attr{margin-left:1.8em !important;}.type-decl>pre>.toggle-attributes{margin-left:2.2em;}.type-decl>pre>.docblock.attributes{margin-left:4em;}
\ No newline at end of file
diff --git a/docs/api/duckscript/search-index.js b/docs/api/duckscript/search-index.js
new file mode 100644
index 0000000..641d1de
--- /dev/null
+++ b/docs/api/duckscript/search-index.js
@@ -0,0 +1,5 @@
+var N=null,E="",T="t",U="u",searchIndex={};
+var R=["duckscript","parser","scripterror","instruction","result","runner","context","hashmap","command","commands","string","commandresult","duckscript::types","Holds the error information","Error Info Type","The command name","arguments","The command arguments","Preprocess instruction","Runtime script instruction","Creates and returns a new instance.","signed number","unsigned number","runtime","duckscript::types::command","try_from","try_into","borrow_mut","to_owned","clone_into","type_id","duckscript::types::error","borrow","typeid","duckscript::types::instruction","duckscript::types::runtime","preprocessinstruction","scriptinstruction","instructionmetainfo","formatter","Commands","GoToValue","CommandResult","ScriptError","ErrorInfo","PreProcessInstruction","ScriptInstruction","InstructionMetaInfo","Instruction","InstructionType","Runtime","StateValue"];
+
+searchIndex["duckscript"]={"doc":R[0],"i":[[0,R[1],R[0],R[1],N,N],[5,"parse_file","duckscript::parser","parses the file and returns a vector of instructions",N,[[["str"]],[["vec",[R[3]]],[R[4],["vec",R[2]]],[R[2]]]]],[5,"parse_text",E,"parses the provided script text and returns a vector of…",N,[[["str"]],[["vec",[R[3]]],[R[4],["vec",R[2]]],[R[2]]]]],[0,R[5],R[0],R[5],N,N],[5,"run_script","duckscript::runner","Executes the provided script with the given context",N,[[[R[6]],["str"]],[[R[4],[R[6],R[2]]],[R[6]],[R[2]]]]],[5,"run_script_file",E,"Executes the provided script file with the given context",N,[[[R[6]],["str"]],[[R[4],[R[6],R[2]]],[R[6]],[R[2]]]]],[5,"run_instruction",E,"Enables to evaluate a single instruction and return its…",N,[[[R[7]],["vec"],[R[9]],[R[7]],[R[3]],["usize"]]]],[0,"types",R[0],"types",N,N],[0,R[8],R[12],R[8],N,N],[3,R[40],R[24],"Holds and enables access to the runtime commands…",N,N],[12,R[9],E,"mapping between command names to implementations",0,N],[12,"aliases",E,"mapping between aliases to command names",0,N],[4,R[41],E,"GoTo type value",N,N],[13,"Label",E,"label target",1,N],[13,"Line",E,"Line number",1,N],[4,R[42],E,"Command execution result",N,N],[13,"Continue",E,"Holds the command output and tells the runner to continue…",2,N],[13,"GoTo",E,"Holds the command output and tells the runner to jump to…",2,N],[13,"Error",E,"Holds the error message and the meta info of the…",2,N],[13,"Crash",E,"Holds the critical error message and the meta info of the…",2,N],[13,"Exit",E,"Holds the command output and tells the runner to stop the…",2,N],[8,"Command",E,"Defines the command capabilities",N,N],[10,"name",E,"The full command name which can be used to invoke this…",3,[[["self"]],[R[10]]]],[11,"aliases",E,"A list of aliases that can also be used to invoke this…",3,[[["self"]],[["vec",[R[10]]],[R[10]]]]],[11,"help",E,"Command documentation.",3,[[["self"]],[R[10]]]],[11,"requires_context",E,"If true the run with the context will be invoked.",3,[[["self"]],["bool"]]],[11,"run",E,"Runs the given instruction",3,[[["vec",[R[10]]],[R[10]],["self"]],[R[11]]]],[11,"run_with_context",E,"Run the instruction with access to the runtime context.",3,[[[R[9]],["vec",[R[10]]],[R[7]],[R[10]],["option",[R[10]]],[R[7]],["vec"],["self"],["usize"]],[R[11]]]],[11,"new",E,R[20],0,[[],[R[9]]]],[11,"return_after_usage",E,"Returns the command after it was being used. No…",0,[[[R[8]],["self"],["box",[R[8]]]]]],[11,"set",E,"Adds a new command definition. It will fail in case…",0,[[[R[8]],["self"],["box",[R[8]]]],[[R[4],[R[2]]],[R[2]]]]],[11,"get",E,"Return the command based on the given command name/alias",0,[[["str"],["self"]],[["option",["box"]],["box"]]]],[11,"exists",E,"Return true if the command based on the given command…",0,[[["str"],["self"]],["bool"]]],[11,"get_for_use",E,"Return the command based on the given command name/alias.…",0,[[["self"],["str"]],[["option",["box"]],["box",[R[8]]]]]],[11,"get_all_command_names",E,"Returns all the command names currently registered",0,[[["self"]],[["vec",[R[10]]],[R[10]]]]],[11,"remove",E,"Removes the requested command.",0,[[["self"],["str"]]]],[0,"error",R[12],"error",N,N],[3,R[43],R[31],"Script error struct",N,N],[12,"info",E,R[13],4,N],[4,R[44],E,R[13],N,N],[13,"ErrorReadingFile",E,R[14],5,N],[13,"Initialization",E,R[14],5,N],[13,R[50],E,R[14],5,N],[13,"PreProcessNoCommandFound",E,R[14],5,N],[13,"ControlWithoutValidValue",E,R[14],5,N],[13,"InvalidControlLocation",E,R[14],5,N],[13,"MissingEndQuotes",E,R[14],5,N],[13,"MissingOutputVariableName",E,R[14],5,N],[13,"InvalidEqualsLocation",E,R[14],5,N],[13,"InvalidQuotesLocation",E,R[14],5,N],[13,"EmptyLabel",E,R[14],5,N],[13,"UnknownPreProcessorCommand",E,R[14],5,N],[0,R[3],R[12],R[3],N,N],[3,R[45],R[34],R[18],N,N],[12,R[8],E,R[15],6,N],[12,R[16],E,R[17],6,N],[3,R[46],E,R[19],N,N],[12,"label",E,"The label tag",7,N],[12,"output",E,"The command output variable name",7,N],[12,R[8],E,R[15],7,N],[12,R[16],E,R[17],7,N],[3,R[47],E,"Meta information for all instruction types",N,N],[12,"line",E,"The line number",8,N],[12,"source",E,"The source file/url/...",8,N],[3,R[48],E,"Instruction data",N,N],[12,"meta_info",E,"Meta info",9,N],[12,"instruction_type",E,"The instruction",9,N],[4,R[49],E,"Instruction Type - script, preprocess",N,N],[13,"Empty",E,"Empty instruction",10,N],[13,"PreProcess",E,R[18],10,N],[13,"Script",E,R[19],10,N],[11,"new",E,R[20],6,[[],[R[36]]]],[11,"new",E,R[20],7,[[],[R[37]]]],[11,"new",E,R[20],8,[[],[R[38]]]],[0,R[23],R[12],R[23],N,N],[3,"Context",R[35],"The context structure",N,N],[12,"variables",E,"The runtime variables",11,N],[12,"state",E,"The runtime state",11,N],[12,R[9],E,"The command implementations",11,N],[3,R[50],E,"The runtime structure",N,N],[12,"instructions",E,"The script instructions",12,N],[12,"label_to_line",E,"Label to line number mapping",12,N],[12,R[6],E,"The runtime context",12,N],[4,R[51],E,"enum defining what values can be stored in the state map",N,N],[13,"Boolean",E,"boolean value",13,N],[13,"Number",E,R[21],13,N],[13,"UnsignedNumber",E,R[22],13,N],[13,"Number32Bit",E,R[21],13,N],[13,"UnsignedNumber32Bit",E,R[22],13,N],[13,"Number64Bit",E,R[21],13,N],[13,"UnsignedNumber64Bit",E,R[22],13,N],[13,"String",E,"textual value",13,N],[13,"List",E,"list",13,N],[13,"SubState",E,"sub state value",13,N],[11,"new",E,R[20],11,[[],[R[6]]]],[11,"new",E,R[20],12,[[[R[6]]],[R[23]]]],[11,"from",R[24],E,0,[[[T]],[T]]],[11,"into",E,E,0,[[],[U]]],[11,R[25],E,E,0,[[[U]],[R[4]]]],[11,R[26],E,E,0,[[],[R[4]]]],[11,R[27],E,E,0,[[["self"]],[T]]],[11,R[32],E,E,0,[[["self"]],[T]]],[11,R[30],E,E,0,[[["self"]],[R[33]]]],[11,"from",E,E,1,[[[T]],[T]]],[11,"into",E,E,1,[[],[U]]],[11,R[28],E,E,1,[[["self"]],[T]]],[11,R[29],E,E,1,[[[T],["self"]]]],[11,R[25],E,E,1,[[[U]],[R[4]]]],[11,R[26],E,E,1,[[],[R[4]]]],[11,R[27],E,E,1,[[["self"]],[T]]],[11,R[32],E,E,1,[[["self"]],[T]]],[11,R[30],E,E,1,[[["self"]],[R[33]]]],[11,"from",E,E,2,[[[T]],[T]]],[11,"into",E,E,2,[[],[U]]],[11,R[28],E,E,2,[[["self"]],[T]]],[11,R[29],E,E,2,[[[T],["self"]]]],[11,R[25],E,E,2,[[[U]],[R[4]]]],[11,R[26],E,E,2,[[],[R[4]]]],[11,R[27],E,E,2,[[["self"]],[T]]],[11,R[32],E,E,2,[[["self"]],[T]]],[11,R[30],E,E,2,[[["self"]],[R[33]]]],[11,"from",R[31],E,4,[[[T]],[T]]],[11,"into",E,E,4,[[],[U]]],[11,"to_string",E,E,4,[[["self"]],[R[10]]]],[11,R[25],E,E,4,[[[U]],[R[4]]]],[11,R[26],E,E,4,[[],[R[4]]]],[11,R[27],E,E,4,[[["self"]],[T]]],[11,R[32],E,E,4,[[["self"]],[T]]],[11,R[30],E,E,4,[[["self"]],[R[33]]]],[11,"from",E,E,5,[[[T]],[T]]],[11,"into",E,E,5,[[],[U]]],[11,R[25],E,E,5,[[[U]],[R[4]]]],[11,R[26],E,E,5,[[],[R[4]]]],[11,R[27],E,E,5,[[["self"]],[T]]],[11,R[32],E,E,5,[[["self"]],[T]]],[11,R[30],E,E,5,[[["self"]],[R[33]]]],[11,"from",R[34],E,6,[[[T]],[T]]],[11,"into",E,E,6,[[],[U]]],[11,R[28],E,E,6,[[["self"]],[T]]],[11,R[29],E,E,6,[[[T],["self"]]]],[11,R[25],E,E,6,[[[U]],[R[4]]]],[11,R[26],E,E,6,[[],[R[4]]]],[11,R[27],E,E,6,[[["self"]],[T]]],[11,R[32],E,E,6,[[["self"]],[T]]],[11,R[30],E,E,6,[[["self"]],[R[33]]]],[11,"from",E,E,7,[[[T]],[T]]],[11,"into",E,E,7,[[],[U]]],[11,R[28],E,E,7,[[["self"]],[T]]],[11,R[29],E,E,7,[[[T],["self"]]]],[11,R[25],E,E,7,[[[U]],[R[4]]]],[11,R[26],E,E,7,[[],[R[4]]]],[11,R[27],E,E,7,[[["self"]],[T]]],[11,R[32],E,E,7,[[["self"]],[T]]],[11,R[30],E,E,7,[[["self"]],[R[33]]]],[11,"from",E,E,8,[[[T]],[T]]],[11,"into",E,E,8,[[],[U]]],[11,R[28],E,E,8,[[["self"]],[T]]],[11,R[29],E,E,8,[[[T],["self"]]]],[11,R[25],E,E,8,[[[U]],[R[4]]]],[11,R[26],E,E,8,[[],[R[4]]]],[11,R[27],E,E,8,[[["self"]],[T]]],[11,R[32],E,E,8,[[["self"]],[T]]],[11,R[30],E,E,8,[[["self"]],[R[33]]]],[11,"from",E,E,9,[[[T]],[T]]],[11,"into",E,E,9,[[],[U]]],[11,R[28],E,E,9,[[["self"]],[T]]],[11,R[29],E,E,9,[[[T],["self"]]]],[11,R[25],E,E,9,[[[U]],[R[4]]]],[11,R[26],E,E,9,[[],[R[4]]]],[11,R[27],E,E,9,[[["self"]],[T]]],[11,R[32],E,E,9,[[["self"]],[T]]],[11,R[30],E,E,9,[[["self"]],[R[33]]]],[11,"from",E,E,10,[[[T]],[T]]],[11,"into",E,E,10,[[],[U]]],[11,R[28],E,E,10,[[["self"]],[T]]],[11,R[29],E,E,10,[[[T],["self"]]]],[11,R[25],E,E,10,[[[U]],[R[4]]]],[11,R[26],E,E,10,[[],[R[4]]]],[11,R[27],E,E,10,[[["self"]],[T]]],[11,R[32],E,E,10,[[["self"]],[T]]],[11,R[30],E,E,10,[[["self"]],[R[33]]]],[11,"from",R[35],E,11,[[[T]],[T]]],[11,"into",E,E,11,[[],[U]]],[11,R[25],E,E,11,[[[U]],[R[4]]]],[11,R[26],E,E,11,[[],[R[4]]]],[11,R[27],E,E,11,[[["self"]],[T]]],[11,R[32],E,E,11,[[["self"]],[T]]],[11,R[30],E,E,11,[[["self"]],[R[33]]]],[11,"from",E,E,12,[[[T]],[T]]],[11,"into",E,E,12,[[],[U]]],[11,R[25],E,E,12,[[[U]],[R[4]]]],[11,R[26],E,E,12,[[],[R[4]]]],[11,R[27],E,E,12,[[["self"]],[T]]],[11,R[32],E,E,12,[[["self"]],[T]]],[11,R[30],E,E,12,[[["self"]],[R[33]]]],[11,"from",E,E,13,[[[T]],[T]]],[11,"into",E,E,13,[[],[U]]],[11,R[28],E,E,13,[[["self"]],[T]]],[11,R[29],E,E,13,[[[T],["self"]]]],[11,R[25],E,E,13,[[[U]],[R[4]]]],[11,R[26],E,E,13,[[],[R[4]]]],[11,R[27],E,E,13,[[["self"]],[T]]],[11,R[32],E,E,13,[[["self"]],[T]]],[11,R[30],E,E,13,[[["self"]],[R[33]]]],[11,"clone",R[24],E,1,[[["self"]],["gotovalue"]]],[11,"clone",E,E,2,[[["self"]],[R[11]]]],[11,"clone",R[34],E,6,[[["self"]],[R[36]]]],[11,"clone",E,E,7,[[["self"]],[R[37]]]],[11,"clone",E,E,10,[[["self"]],["instructiontype"]]],[11,"clone",E,E,8,[[["self"]],[R[38]]]],[11,"clone",E,E,9,[[["self"]],[R[3]]]],[11,"clone",R[35],E,13,[[["self"]],["statevalue"]]],[11,"fmt",R[31],"Formats the script error using the given formatter.",4,[[[R[39]],["self"]],[[R[4],["error"]],["error"]]]],[11,"fmt",R[24],E,1,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",E,E,2,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",R[31],E,5,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",E,E,4,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",R[34],E,6,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",E,E,7,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",E,E,10,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",E,E,8,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",E,E,9,[[[R[39]],["self"]],[R[4]]]],[11,"fmt",R[35],E,13,[[[R[39]],["self"]],[R[4]]]]],"p":[[3,R[40]],[4,R[41]],[4,R[42]],[8,"Command"],[3,R[43]],[4,R[44]],[3,R[45]],[3,R[46]],[3,R[47]],[3,R[48]],[4,R[49]],[3,"Context"],[3,R[50]],[4,R[51]]]};
+initSearch(searchIndex);addSearchOptions(searchIndex);
\ No newline at end of file
diff --git a/docs/api/duckscript/settings.css b/docs/api/duckscript/settings.css
new file mode 100644
index 0000000..4201b26
--- /dev/null
+++ b/docs/api/duckscript/settings.css
@@ -0,0 +1 @@
+.setting-line{padding:5px;}.setting-line>div{max-width:calc(100% - 74px);display:inline-block;vertical-align:top;font-size:17px;padding-top:2px;}.toggle{position:relative;display:inline-block;width:45px;height:27px;margin-right:20px;}.toggle input{display:none;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.3s;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;-webkit-transition:.3s;transition:.3s;}input:checked+.slider{background-color:#2196F3;}input:focus+.slider{box-shadow:0 0 1px #2196F3;}input:checked+.slider:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px);}
\ No newline at end of file
diff --git a/docs/api/duckscript/settings.html b/docs/api/duckscript/settings.html
new file mode 100644
index 0000000..ea7cb83
--- /dev/null
+++ b/docs/api/duckscript/settings.html
@@ -0,0 +1 @@
+Rustdoc settings
Rustdoc settings
Auto-hide item declarations.
Auto-hide item attributes.
Auto-hide trait implementations documentation
Auto-hide item methods' documentation
Directly go to item in search if there is only one result
Show line numbers on code examples
\ No newline at end of file
diff --git a/docs/api/duckscript/settings.js b/docs/api/duckscript/settings.js
new file mode 100644
index 0000000..cfed84c
--- /dev/null
+++ b/docs/api/duckscript/settings.js
@@ -0,0 +1 @@
+(function(){function changeSetting(settingName,isEnabled){updateLocalStorage('rustdoc-'+settingName,isEnabled);}function getSettingValue(settingName){return getCurrentValue('rustdoc-'+settingName);}function setEvents(){var elems=document.getElementsByClassName("slider");if(!elems||elems.length===0){return;}for(var i=0;i"){sidebar.style.left="";this.style.left="";child.innerText="<";updateLocalStorage("rustdoc-source-sidebar-show","true");}else{sidebar.style.left="-300px";this.style.left="0";child.innerText=">";updateLocalStorage("rustdoc-source-sidebar-show","false");}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner1=document.createElement("div");inner1.style.position="relative";var inner2=document.createElement("div");inner2.style.paddingTop="3px";if(getCurrentValue("rustdoc-source-sidebar-show")==="true"){inner2.innerText="<";}else{inner2.innerText=">";sidebarToggle.style.left="0";}inner1.appendChild(inner2);sidebarToggle.appendChild(inner1);return sidebarToggle;}function createSourceSidebar(){if(window.rootPath.endsWith("/")===false){window.rootPath+="/";}var main=document.getElementById("main");var sidebarToggle=createSidebarToggle();main.insertBefore(sidebarToggle,main.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("rustdoc-source-sidebar-show")!=="true"){sidebar.style.left="-300px";}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile);});main.insertBefore(sidebar,main.firstChild);}
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/expansion.rs.html b/docs/api/duckscript/src/duckscript/expansion.rs.html
new file mode 100644
index 0000000..1498c7f
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/expansion.rs.html
@@ -0,0 +1,233 @@
+expansion.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/io.rs.html b/docs/api/duckscript/src/duckscript/io.rs.html
new file mode 100644
index 0000000..103cfe1
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/io.rs.html
@@ -0,0 +1,61 @@
+io.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/lib.rs.html b/docs/api/duckscript/src/duckscript/lib.rs.html
new file mode 100644
index 0000000..ffe3ce3
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/lib.rs.html
@@ -0,0 +1,269 @@
+lib.rs.html -- source
+#![deny(
+ absolute_paths_not_starting_with_crate,
+ ambiguous_associated_items,
+ anonymous_parameters,
+ const_err,
+ dead_code,
+ deprecated,
+ deprecated_in_future,
+ duplicate_macro_exports,
+ ellipsis_inclusive_range_patterns,
+ exceeding_bitshifts,
+ explicit_outlives_requirements,
+ exported_private_dependencies,
+ ill_formed_attribute_input,
+ illegal_floating_point_literal_pattern,
+ improper_ctypes,
+ indirect_structural_match,
+ invalid_type_param_default,
+ irrefutable_let_patterns,
+ keyword_idents,
+ late_bound_lifetime_arguments,
+ legacy_constructor_visibility,
+ legacy_directory_ownership,
+ macro_expanded_macro_exports_accessed_by_absolute_paths,
+ missing_copy_implementations,
+ missing_docs,
+ missing_fragment_specifier,
+ mutable_borrow_reservation_conflict,
+ mutable_transmutes,
+ nested_impl_trait,
+ no_mangle_const_items,
+ no_mangle_generic_items,
+ non_ascii_idents,
+ non_camel_case_types,
+ non_shorthand_field_patterns,
+ non_snake_case,
+ non_upper_case_globals,
+ order_dependent_trait_objects,
+ overflowing_literals,
+ parenthesized_params_in_types_and_modules,
+ path_statements,
+ patterns_in_fns_without_body,
+ plugin_as_library,
+ private_doc_tests,
+ private_in_public,
+ proc_macro_derive_resolution_fallback,
+ pub_use_of_private_extern_crate,
+ safe_extern_statics,
+ safe_packed_borrows,
+ stable_features,
+ trivial_bounds,
+ trivial_casts,
+ trivial_numeric_casts,
+ type_alias_bounds,
+ tyvar_behind_raw_pointer,
+ unconditional_recursion,
+ unions_with_drop_fields,
+ unknown_crate_types,
+ unnameable_test_items,
+ unreachable_code,
+ unreachable_patterns,
+ unreachable_pub,
+ unsafe_code,
+ unstable_features,
+ unstable_name_collisions,
+ unused_allocation,
+ unused_assignments,
+ unused_attributes,
+ unused_comparisons,
+ unused_doc_comments,
+ unused_extern_crates,
+ unused_features,
+ unused_import_braces,
+ unused_imports,
+ unused_labels,
+ unused_lifetimes,
+ unused_macros,
+ unused_must_use,
+ unused_mut,
+ unused_parens,
+ unused_qualifications,
+ unused_unsafe,
+ unused_variables,
+ where_clauses_object_safety,
+ while_true
+)]
+#![warn(macro_use_extern_crate, unknown_lints)]
+#![allow(
+ bare_trait_objects,
+ box_pointers,
+ elided_lifetimes_in_paths,
+ intra_doc_link_resolution_failure,
+ missing_doc_code_examples,
+ missing_debug_implementations,
+ single_use_lifetimes,
+ unused_results,
+ variant_size_differences,
+ warnings,
+ renamed_and_removed_lints
+)]
+
+//! # duckscript
+//!
+//! Simple, extendable and embeddable scripting language.
+//!
+//! This library is the actual script parser and runner.<br>
+//! On it's own, it has no actual commands as those need to be provided externally (see duckscript_sdk).
+//!
+//! # Installation
+//! In order to use this library, just add it as a dependency:
+//!
+//! ```ini
+//! [dependencies]
+//! duckscript = "*"
+//! ```
+//!
+//! # Contributing
+//! See [contributing guide](https://github.com/sagiegurari/duckscript/blob/master/.github/CONTRIBUTING.md)
+//!
+//! # License
+//! Developed by Sagie Gur-Ari and licensed under the
+//! [Apache 2](https://github.com/sagiegurari/duckscript/blob/master/LICENSE) open source license.
+//!
+
+modexpansion;
+modio;
+pubmodparser;
+modpreprocessor;
+pubmodrunner;
+pubmodtypes;
+
+#[cfg(test)]
+modtest;
+
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/parser.rs.html b/docs/api/duckscript/src/duckscript/parser.rs.html
new file mode 100644
index 0000000..9337070
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/parser.rs.html
@@ -0,0 +1,937 @@
+parser.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/preprocessor/include_files_preprocessor.rs.html b/docs/api/duckscript/src/duckscript/preprocessor/include_files_preprocessor.rs.html
new file mode 100644
index 0000000..f63b8cb
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/preprocessor/include_files_preprocessor.rs.html
@@ -0,0 +1,113 @@
+include_files_preprocessor.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/preprocessor/mod.rs.html b/docs/api/duckscript/src/duckscript/preprocessor/mod.rs.html
new file mode 100644
index 0000000..78d16fe
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/preprocessor/mod.rs.html
@@ -0,0 +1,81 @@
+mod.rs.html -- source
+//! # preprocessor
+//!
+//! The pre processor is invoked on parse time by the script parser.
+//! Currently it provide only limited amount of commands and it is not meant to be extendable.
+//!
+
+#[cfg(test)]
+#[path="./mod_test.rs"]
+modmod_test;
+
+modinclude_files_preprocessor;
+modprint_preprocessor;
+
+usecrate::types::error::{ErrorInfo, ScriptError};
+usecrate::types::instruction::{Instruction, InstructionType};
+
+pub(crate) fnrun(instruction: &Instruction) ->Result<Vec<Instruction>, ScriptError> {
+ matchinstruction.instruction_type {
+ InstructionType::PreProcess(refinstruction_type) =>match&instruction_type.command {
+ Some(command) =>matchcommand.as_ref() {
+ "print"=> {
+ print_preprocessor::run(&instruction_type.arguments);
+ Ok(vec![])
+ }
+ "include_files"=>include_files_preprocessor::run(
+ &instruction_type.arguments,
+ &instruction.meta_info,
+ ),
+ _=>Err(ScriptError {
+ info: ErrorInfo::UnknownPreProcessorCommand(instruction.meta_info.clone()),
+ }),
+ },
+ None=>Err(ScriptError {
+ info: ErrorInfo::PreProcessNoCommandFound(instruction.meta_info.clone()),
+ }),
+ },
+ _=>Ok(vec![]),
+ }
+}
+
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/preprocessor/print_preprocessor.rs.html b/docs/api/duckscript/src/duckscript/preprocessor/print_preprocessor.rs.html
new file mode 100644
index 0000000..15889be
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/preprocessor/print_preprocessor.rs.html
@@ -0,0 +1,31 @@
+print_preprocessor.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/runner.rs.html b/docs/api/duckscript/src/duckscript/runner.rs.html
new file mode 100644
index 0000000..9956930
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/runner.rs.html
@@ -0,0 +1,591 @@
+runner.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/types/command.rs.html b/docs/api/duckscript/src/duckscript/types/command.rs.html
new file mode 100644
index 0000000..23243cf
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/types/command.rs.html
@@ -0,0 +1,397 @@
+command.rs.html -- source
+//! # command
+//!
+//! The command trait and access module.
+//!
+
+#[cfg(test)]
+#[path="./command_test.rs"]
+modcommand_test;
+
+usecrate::types::error::{ErrorInfo, ScriptError};
+usecrate::types::instruction::Instruction;
+usecrate::types::runtime::StateValue;
+usestd::collections::HashMap;
+
+/// GoTo type value
+#[derive(Debug, Clone)]
+pubenumGoToValue {
+ /// label target
+ Label(String),
+ /// Line number
+ Line(usize),
+}
+
+/// Command execution result
+#[derive(Debug, Clone)]
+pubenumCommandResult {
+ /// Holds the command output and tells the runner to continue to next instruction
+ Continue(Option<String>),
+ /// Holds the command output and tells the runner to jump to the provided label
+ GoTo(Option<String>, GoToValue),
+ /// Holds the error message and the meta info of the instruction that caused it
+ Error(String),
+ /// Holds the critical error message and the meta info of the instruction that caused it
+ Crash(String),
+ /// Holds the command output and tells the runner to stop the script execution
+ Exit(Option<String>),
+}
+
+/// Defines the command capabilities
+pubtraitCommand {
+ /// The full command name which can be used to invoke this command.
+ fnname(&self) ->String;
+
+ /// A list of aliases that can also be used to invoke this command.
+ fnaliases(&self) ->Vec<String> {
+ vec![]
+ }
+
+ /// Command documentation.
+ fnhelp(&self) ->String {
+ format!("No documentation found for command: {}", self.name())
+ }
+
+ /// If true the run with the context will be invoked.
+ fnrequires_context(&self) ->bool {
+ false
+ }
+
+ /// Runs the given instruction
+ fnrun(&self, _arguments: Vec<String>) ->CommandResult {
+ CommandResult::Error(format!("Not implemented for command: {}", &self.name()).to_string())
+ }
+
+ /// Run the instruction with access to the runtime context.
+ ///
+ /// # Arguments
+ ///
+ /// * `arguments` - The command arguments array
+ /// * `state` - Internal state which is only used by commands to store/pull data
+ /// * `variables` - All script variables
+ /// * `output_variable` - The output variable name (if defined)
+ /// * `instructions` - The entire list of instructions which make up the currently running script
+ /// * `commands` - The currently known commands
+ /// * `line` - The current instruction line number (global line number after including all scripts into one global script)
+ fnrun_with_context(
+ &self,
+ _arguments: Vec<String>,
+ _state: &mutHashMap<String, StateValue>,
+ _variables: &mutHashMap<String, String>,
+ _output_variable: Option<String>,
+ _instructions: &Vec<Instruction>,
+ _commands: &mutCommands,
+ _line: usize,
+ ) ->CommandResult {
+ CommandResult::Error(format!("Not implemented for command: {}", &self.name()).to_string())
+ }
+}
+
+/// Holds and enables access to the runtime commands implementations
+pubstructCommands {
+ /// mapping between command names to implementations
+ pubcommands: HashMap<String, Box<dynCommand>>,
+ /// mapping between aliases to command names
+ pubaliases: HashMap<String, String>,
+}
+
+implCommands {
+ /// Creates and returns a new instance.
+ pubfnnew() ->Commands {
+ Commands {
+ commands: HashMap::new(),
+ aliases: HashMap::new(),
+ }
+ }
+
+ /// Returns the command after it was being used.
+ /// No validations will be made.
+ pubfnreturn_after_usage(&mutself, command: Box<dynCommand>) {
+ letname=command.name();
+
+ self.commands.insert(name.clone(), command);
+ }
+
+ /// Adds a new command definition.
+ /// It will fail in case another command already defined the same name/aliases
+ pubfnset(&mutself, command: Box<dynCommand>) ->Result<(), ScriptError> {
+ letname=command.name();
+ letaliases=command.aliases();
+
+ ifself.commands.contains_key(&name) {
+ returnErr(ScriptError {
+ info: ErrorInfo::Initialization(format!("Command: {} already defined.", &name)),
+ });
+ }
+
+ foraliasin&aliases {
+ ifself.aliases.contains_key(alias) {
+ returnErr(ScriptError {
+ info: ErrorInfo::Initialization(format!(
+ "Alias: {} for command: {} already defined.",
+ &alias, &name
+ )),
+ });
+ }
+ }
+
+ self.commands.insert(name.clone(), command);
+
+ foraliasin&aliases {
+ self.aliases.insert(alias.to_string(), name.clone());
+ }
+
+ Ok(())
+ }
+
+ /// Return the command based on the given command name/alias
+ pubfnget(&self, name: &str) ->Option<&Box<dynCommand>> {
+ letcommand_name=matchself.aliases.get(name) {
+ Some(refvalue) =>value,
+ None=>name,
+ };
+
+ matchself.commands.get(command_name) {
+ Some(refvalue) =>Some(value.clone()),
+ None=>None,
+ }
+ }
+
+ /// Return true if the command based on the given command name/alias exists
+ pubfnexists(&self, name: &str) ->bool {
+ letcommand=self.get(name);
+
+ command.is_some()
+ }
+
+ /// Return the command based on the given command name/alias.
+ /// It will also remove it in the process.
+ pubfnget_for_use(&mutself, name: &str) ->Option<Box<dynCommand>> {
+ letcommand_name=matchself.aliases.get(name) {
+ Some(refvalue) =>value,
+ None=>name,
+ };
+
+ matchself.commands.remove(command_name) {
+ Some(value) =>Some(value),
+ None=>None,
+ }
+ }
+
+ /// Returns all the command names currently registered
+ pubfnget_all_command_names(&self) ->Vec<String> {
+ letmutnames=vec![];
+
+ forkeyinself.commands.keys() {
+ names.push(key.to_string());
+ }
+
+ names.sort();
+
+ names
+ }
+
+ /// Removes the requested command.
+ pubfnremove(&mutself, name: &str) {
+ self.get_for_use(name);
+ }
+}
+
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/types/error.rs.html b/docs/api/duckscript/src/duckscript/types/error.rs.html
new file mode 100644
index 0000000..18ddd0f
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/types/error.rs.html
@@ -0,0 +1,235 @@
+error.rs.html -- source
+//! # error
+//!
+//! The error structure and types.
+//!
+
+usecrate::types::instruction::InstructionMetaInfo;
+usestd::fmt;
+usestd::fmt::Display;
+usestd::io;
+
+#[cfg(test)]
+#[path="./error_test.rs"]
+moderror_test;
+
+fnformat_error_message(
+ formatter: &mutfmt::Formatter,
+ meta_info: &InstructionMetaInfo,
+ message: &str,
+) ->Result<(), fmt::Error> {
+ letsource=matchmeta_info.source {
+ Some(refvalue) =>value.to_string(),
+ None=>"Unknown".to_string(),
+ };
+ letline=matchmeta_info.line {
+ Some(value) =>value.to_string(),
+ None=>"Unknown".to_string(),
+ };
+
+ write!(formatter, "Source: {} Line: {} - {}", source, line, message)
+}
+
+#[derive(Debug)]
+/// Holds the error information
+pubenumErrorInfo {
+ /// Error Info Type
+ ErrorReadingFile(String, Option<io::Error>),
+ /// Error Info Type
+ Initialization(String),
+ /// Error Info Type
+ Runtime(String, Option<InstructionMetaInfo>),
+ /// Error Info Type
+ PreProcessNoCommandFound(InstructionMetaInfo),
+ /// Error Info Type
+ ControlWithoutValidValue(InstructionMetaInfo),
+ /// Error Info Type
+ InvalidControlLocation(InstructionMetaInfo),
+ /// Error Info Type
+ MissingEndQuotes(InstructionMetaInfo),
+ /// Error Info Type
+ MissingOutputVariableName(InstructionMetaInfo),
+ /// Error Info Type
+ InvalidEqualsLocation(InstructionMetaInfo),
+ /// Error Info Type
+ InvalidQuotesLocation(InstructionMetaInfo),
+ /// Error Info Type
+ EmptyLabel(InstructionMetaInfo),
+ /// Error Info Type
+ UnknownPreProcessorCommand(InstructionMetaInfo),
+}
+
+#[derive(Debug)]
+/// Script error struct
+pubstructScriptError {
+ /// Holds the error information
+ pubinfo: ErrorInfo,
+}
+
+implDisplayforScriptError {
+ /// Formats the script error using the given formatter.
+ fnfmt(&self, formatter: &mutfmt::Formatter) ->Result<(), fmt::Error> {
+ matchself.info {
+ ErrorInfo::ErrorReadingFile(reffile, refcause) => {
+ writeln!(formatter, "Error reading file: {}", file)?;
+ matchcause {
+ Some(cause_err) =>cause_err.fmt(formatter),
+ None=>Ok(()),
+ }
+ }
+ ErrorInfo::Initialization(refmessage) =>write!(formatter, "{}", message),
+ ErrorInfo::Runtime(refmessage, refmeta_info) => {
+ letempty_meta_data=InstructionMetaInfo::new();
+ letmeta_info_value=meta_info.as_ref().unwrap_or(&empty_meta_data);
+ format_error_message(formatter, &meta_info_value, message)
+ }
+ ErrorInfo::PreProcessNoCommandFound(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "preprocessor is missing a command")
+ }
+ ErrorInfo::ControlWithoutValidValue(refmeta_info) =>format_error_message(
+ formatter,
+ &meta_info,
+ "control character found without a valid value",
+ ),
+ ErrorInfo::InvalidControlLocation(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "invalid control character location")
+ }
+ ErrorInfo::MissingEndQuotes(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "missing end quotes")
+ }
+ ErrorInfo::MissingOutputVariableName(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "missing variable name")
+ }
+ ErrorInfo::InvalidEqualsLocation(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "invalid equals sign location")
+ }
+ ErrorInfo::InvalidQuotesLocation(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "invalid quotes location")
+ }
+ ErrorInfo::EmptyLabel(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "empty lable found")
+ }
+ ErrorInfo::UnknownPreProcessorCommand(refmeta_info) => {
+ format_error_message(formatter, &meta_info, "unknow preprocessor command")
+ }
+ }
+ }
+}
+
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/types/instruction.rs.html b/docs/api/duckscript/src/duckscript/types/instruction.rs.html
new file mode 100644
index 0000000..5d4d5d2
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/types/instruction.rs.html
@@ -0,0 +1,245 @@
+instruction.rs.html -- source
+//! # instruction
+//!
+//! The instruction type.
+//!
+
+#[cfg(test)]
+#[path="./instruction_test.rs"]
+modinstruction_test;
+
+traitInstructionOperations {
+ /// Returns true if this instruction has some actionable command to run
+ fnis_actionable(&self) ->bool;
+}
+
+/// Preprocess instruction
+#[derive(Debug, Clone)]
+pubstructPreProcessInstruction {
+ /// The command name
+ pubcommand: Option<String>,
+ /// The command arguments
+ pubarguments: Option<Vec<String>>,
+}
+
+implPreProcessInstruction {
+ /// Creates and returns a new instance.
+ pubfnnew() ->PreProcessInstruction {
+ PreProcessInstruction {
+ command: None,
+ arguments: None,
+ }
+ }
+}
+
+implInstructionOperationsforPreProcessInstruction {
+ /// Returns true if this instruction has some actionable command to run
+ fnis_actionable(&self) ->bool {
+ returnself.command.is_some();
+ }
+}
+
+/// Runtime script instruction
+#[derive(Debug, Clone)]
+pubstructScriptInstruction {
+ /// The label tag
+ publabel: Option<String>,
+ /// The command output variable name
+ puboutput: Option<String>,
+ /// The command name
+ pubcommand: Option<String>,
+ /// The command arguments
+ pubarguments: Option<Vec<String>>,
+}
+
+implScriptInstruction {
+ /// Creates and returns a new instance.
+ pubfnnew() ->ScriptInstruction {
+ ScriptInstruction {
+ label: None,
+ output: None,
+ command: None,
+ arguments: None,
+ }
+ }
+}
+
+implInstructionOperationsforScriptInstruction {
+ /// Returns true if this instruction has some actionable command to run
+ fnis_actionable(&self) ->bool {
+ returnself.command.is_some();
+ }
+}
+
+/// Instruction Type - script, preprocess
+#[derive(Debug, Clone)]
+pubenumInstructionType {
+ /// Empty instruction
+ Empty,
+ /// Preprocess instruction
+ PreProcess(PreProcessInstruction),
+ /// Runtime script instruction
+ Script(ScriptInstruction),
+}
+
+/// Meta information for all instruction types
+#[derive(Debug, Clone)]
+pubstructInstructionMetaInfo {
+ /// The line number
+ publine: Option<usize>,
+ /// The source file/url/...
+ pubsource: Option<String>,
+}
+
+implInstructionMetaInfo {
+ /// Creates and returns a new instance.
+ pubfnnew() ->InstructionMetaInfo {
+ InstructionMetaInfo {
+ line: None,
+ source: None,
+ }
+ }
+}
+
+/// Instruction data
+#[derive(Debug, Clone)]
+pubstructInstruction {
+ /// Meta info
+ pubmeta_info: InstructionMetaInfo,
+ /// The instruction
+ pubinstruction_type: InstructionType,
+}
+
+implInstructionOperationsforInstruction {
+ /// Returns true if this instruction has some actionable command to run
+ fnis_actionable(&self) ->bool {
+ matchself.instruction_type {
+ InstructionType::Empty=>false,
+ InstructionType::PreProcess(refvalue) =>value.is_actionable(),
+ InstructionType::Script(refvalue) =>value.is_actionable(),
+ }
+ }
+}
+
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/types/mod.rs.html b/docs/api/duckscript/src/duckscript/types/mod.rs.html
new file mode 100644
index 0000000..1950b46
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/types/mod.rs.html
@@ -0,0 +1,19 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript/src/duckscript/types/runtime.rs.html b/docs/api/duckscript/src/duckscript/types/runtime.rs.html
new file mode 100644
index 0000000..90a2edf
--- /dev/null
+++ b/docs/api/duckscript/src/duckscript/types/runtime.rs.html
@@ -0,0 +1,161 @@
+runtime.rs.html -- source
+//! # runtime
+//!
+//! The runtime context structures.
+//!
+
+#[cfg(test)]
+#[path="./runtime_test.rs"]
+modruntime_test;
+
+usecrate::types::command::Commands;
+usecrate::types::instruction::Instruction;
+usestd::collections::HashMap;
+
+/// enum defining what values can be stored in the state map
+#[derive(Debug, Clone)]
+pubenumStateValue {
+ /// boolean value
+ Boolean(bool),
+ /// signed number
+ Number(isize),
+ /// unsigned number
+ UnsignedNumber(usize),
+ /// signed number
+ Number32Bit(i32),
+ /// unsigned number
+ UnsignedNumber32Bit(u32),
+ /// signed number
+ Number64Bit(i64),
+ /// unsigned number
+ UnsignedNumber64Bit(u64),
+ /// textual value
+ String(String),
+ /// list
+ List(Vec<StateValue>),
+ /// sub state value
+ SubState(HashMap<String, StateValue>),
+}
+
+/// The context structure
+pubstructContext {
+ /// The runtime variables
+ pubvariables: HashMap<String, String>,
+ /// The runtime state
+ pubstate: HashMap<String, StateValue>,
+ /// The command implementations
+ pubcommands: Commands,
+}
+
+implContext {
+ /// Creates and returns a new instance.
+ pubfnnew() ->Context {
+ Context {
+ variables: HashMap::new(),
+ state: HashMap::new(),
+ commands: Commands::new(),
+ }
+ }
+}
+
+/// The runtime structure
+pubstructRuntime {
+ /// The script instructions
+ pubinstructions: Option<Vec<Instruction>>,
+ /// Label to line number mapping
+ publabel_to_line: HashMap<String, usize>,
+ /// The runtime context
+ pubcontext: Context,
+}
+
+implRuntime {
+ /// Creates and returns a new instance.
+ pubfnnew(context: Context) ->Runtime {
+ Runtime {
+ instructions: None,
+ label_to_line: HashMap::new(),
+ context,
+ }
+ }
+}
+
+
\ No newline at end of file
diff --git a/docs/api/duckscript/storage.js b/docs/api/duckscript/storage.js
new file mode 100644
index 0000000..53b5c0f
--- /dev/null
+++ b/docs/api/duckscript/storage.js
@@ -0,0 +1 @@
+var resourcesSuffix="";var currentTheme=document.getElementById("themeStyle");var mainTheme=document.getElementById("mainThemeStyle");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className);}function addClass(elem,className){if(!elem||!elem.classList){return;}elem.classList.add(className);}function removeClass(elem,className){if(!elem||!elem.classList){return;}elem.classList.remove(className);}function isHidden(elem){return elem.offsetParent===null;}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;if(reversed!==true){for(var i=0;i=0;--i){if(func(arr[i])===true){return true;}}}}return false;}function onEachLazy(lazyArray,func,reversed){return onEach(Array.prototype.slice.call(lazyArray),func,reversed);}function usableLocalStorage(){if(typeof(Storage)==="undefined"){return false;}try{return window.localStorage!==null&&window.localStorage!==undefined;}catch(err){return false;}}function updateLocalStorage(name,value){if(usableLocalStorage()){localStorage[name]=value;}else{}}function getCurrentValue(name){if(usableLocalStorage()&&localStorage[name]!==undefined){return localStorage[name];}return null;}function switchTheme(styleElem,mainStyleElem,newTheme){var fullBasicCss="rustdoc"+resourcesSuffix+".css";var fullNewTheme=newTheme+resourcesSuffix+".css";var newHref=mainStyleElem.href.replace(fullBasicCss,fullNewTheme);if(styleElem.href===newHref){return;}var found=false;if(savedHref.length===0){onEachLazy(document.getElementsByTagName("link"),function(el){savedHref.push(el.href);});}onEach(savedHref,function(el){if(el===newHref){found=true;return true;}});if(found===true){styleElem.href=newHref;updateLocalStorage("rustdoc-theme",newTheme);}}switchTheme(currentTheme,mainTheme,getCurrentValue("rustdoc-theme")||"light");
\ No newline at end of file
diff --git a/docs/api/duckscript/theme.js b/docs/api/duckscript/theme.js
new file mode 100644
index 0000000..f3a6a82
--- /dev/null
+++ b/docs/api/duckscript/theme.js
@@ -0,0 +1,39 @@
+var themes = document.getElementById("theme-choices");
+var themePicker = document.getElementById("theme-picker");
+
+function switchThemeButtonState() {
+ if (themes.style.display === "block") {
+ themes.style.display = "none";
+ themePicker.style.borderBottomRightRadius = "3px";
+ themePicker.style.borderBottomLeftRadius = "3px";
+ } else {
+ themes.style.display = "block";
+ themePicker.style.borderBottomRightRadius = "0";
+ themePicker.style.borderBottomLeftRadius = "0";
+ }
+};
+
+function handleThemeButtonsBlur(e) {
+ var active = document.activeElement;
+ var related = e.relatedTarget;
+
+ if (active.id !== "themePicker" &&
+ (!active.parentNode || active.parentNode.id !== "theme-choices") &&
+ (!related ||
+ (related.id !== "themePicker" &&
+ (!related.parentNode || related.parentNode.id !== "theme-choices")))) {
+ switchThemeButtonState();
+ }
+}
+
+themePicker.onclick = switchThemeButtonState;
+themePicker.onblur = handleThemeButtonsBlur;
+["dark","light"].forEach(function(item) {
+ var but = document.createElement('button');
+ but.innerHTML = item;
+ but.onclick = function(el) {
+ switchTheme(currentTheme, mainTheme, item);
+ };
+ but.onblur = handleThemeButtonsBlur;
+ themes.appendChild(but);
+});
\ No newline at end of file
diff --git a/docs/api/duckscript/wheel.svg b/docs/api/duckscript/wheel.svg
new file mode 100644
index 0000000..44381a4
--- /dev/null
+++ b/docs/api/duckscript/wheel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/source-files.js b/docs/api/duckscript_sdk/source-files.js
index 41c9a4f..4faa8fc 100644
--- a/docs/api/duckscript_sdk/source-files.js
+++ b/docs/api/duckscript_sdk/source-files.js
@@ -1,3 +1,3 @@
var N = null;var sourcesIndex = {};
-sourcesIndex["duckscriptsdk"] = {"name":"","dirs":[{"name":"sdk","dirs":[{"name":"internal","dirs":[{"name":"sdkdocs","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"std","dirs":[{"name":"alias","files":["mod.rs"]},{"name":"array","files":["mod.rs"]},{"name":"echo","files":["mod.rs"]},{"name":"env","dirs":[{"name":"cd","files":["mod.rs"]},{"name":"get","files":["mod.rs"]},{"name":"pwd","files":["mod.rs"]},{"name":"set","files":["mod.rs"]},{"name":"unset","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"eval","files":["mod.rs"]},{"name":"forin","files":["mod.rs"]},{"name":"fs","dirs":[{"name":"basename","files":["mod.rs"]},{"name":"canonical","files":["mod.rs"]},{"name":"cp","files":["mod.rs"]},{"name":"dirname","files":["mod.rs"]},{"name":"list","files":["mod.rs"]},{"name":"mkdir","files":["mod.rs"]},{"name":"mv","files":["mod.rs"]},{"name":"print","files":["mod.rs"]},{"name":"read","files":["mod.rs"]},{"name":"rm","files":["mod.rs"]},{"name":"rmdir","files":["mod.rs"]},{"name":"touch","files":["mod.rs"]},{"name":"write","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"function","files":["mod.rs"]},{"name":"goto","files":["mod.rs"]},{"name":"ifelse","files":["mod.rs"]},{"name":"man","files":["mod.rs"]},{"name":"math","dirs":[{"name":"calc","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"not","files":["mod.rs"]},{"name":"process","dirs":[{"name":"exec","files":["mod.rs"]},{"name":"exit","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"release","files":["mod.rs"]},{"name":"set","files":["mod.rs"]},{"name":"string","dirs":[{"name":"contains","files":["mod.rs"]},{"name":"ends_with","files":["mod.rs"]},{"name":"equals","files":["mod.rs"]},{"name":"starts_with","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"test","dirs":[{"name":"assert","files":["mod.rs"]},{"name":"assert_eq","files":["mod.rs"]},{"name":"assert_fail","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"thread","dirs":[{"name":"sleep","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"unalias","files":["mod.rs"]}],"files":["mod.rs"]}],"files":["mod.rs"]},{"name":"utils","files":["condition.rs","eval.rs","flags.rs","instruction_query.rs","io.rs","mod.rs","pckg.rs","state.rs"]}],"files":["lib.rs"]};
+sourcesIndex["duckscriptsdk"] = {"name":"","dirs":[{"name":"sdk","dirs":[{"name":"internal","dirs":[{"name":"sdkdocs","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"std","dirs":[{"name":"alias","files":["mod.rs"]},{"name":"collections","dirs":[{"name":"array","files":["mod.rs"]},{"name":"array_length","files":["mod.rs"]},{"name":"range","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"echo","files":["mod.rs"]},{"name":"env","dirs":[{"name":"cd","files":["mod.rs"]},{"name":"get","files":["mod.rs"]},{"name":"pwd","files":["mod.rs"]},{"name":"set","files":["mod.rs"]},{"name":"unset","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"eval","files":["mod.rs"]},{"name":"forin","files":["mod.rs"]},{"name":"fs","dirs":[{"name":"basename","files":["mod.rs"]},{"name":"canonical","files":["mod.rs"]},{"name":"cp","files":["mod.rs"]},{"name":"dirname","files":["mod.rs"]},{"name":"list","files":["mod.rs"]},{"name":"mkdir","files":["mod.rs"]},{"name":"mv","files":["mod.rs"]},{"name":"print","files":["mod.rs"]},{"name":"read","files":["mod.rs"]},{"name":"rm","files":["mod.rs"]},{"name":"rmdir","files":["mod.rs"]},{"name":"touch","files":["mod.rs"]},{"name":"write","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"function","files":["mod.rs"]},{"name":"goto","files":["mod.rs"]},{"name":"ifelse","files":["mod.rs"]},{"name":"is_defined","files":["mod.rs"]},{"name":"man","files":["mod.rs"]},{"name":"math","dirs":[{"name":"calc","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"net","dirs":[{"name":"hostname","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"not","files":["mod.rs"]},{"name":"on_error","dirs":[{"name":"get_last_error","files":["mod.rs"]},{"name":"get_last_error_line","files":["mod.rs"]},{"name":"get_last_error_source","files":["mod.rs"]},{"name":"on_error","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"os_family","files":["mod.rs"]},{"name":"process","dirs":[{"name":"exec","files":["mod.rs"]},{"name":"exit","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"read","files":["mod.rs"]},{"name":"release","files":["mod.rs"]},{"name":"set","files":["mod.rs"]},{"name":"string","dirs":[{"name":"contains","files":["mod.rs"]},{"name":"ends_with","files":["mod.rs"]},{"name":"equals","files":["mod.rs"]},{"name":"indexof","files":["mod.rs"]},{"name":"is_empty","files":["mod.rs"]},{"name":"last_indexof","files":["mod.rs"]},{"name":"length","files":["mod.rs"]},{"name":"starts_with","files":["mod.rs"]},{"name":"substring","files":["mod.rs"]},{"name":"trim","files":["mod.rs"]},{"name":"trim_end","files":["mod.rs"]},{"name":"trim_start","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"test","dirs":[{"name":"assert","files":["mod.rs"]},{"name":"assert_eq","files":["mod.rs"]},{"name":"assert_fail","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"thread","dirs":[{"name":"sleep","files":["mod.rs"]}],"files":["mod.rs"]},{"name":"unalias","files":["mod.rs"]}],"files":["mod.rs"]}],"files":["mod.rs"]},{"name":"utils","files":["condition.rs","eval.rs","flags.rs","instruction_query.rs","io.rs","mod.rs","pckg.rs","state.rs"]}],"files":["lib.rs"]};
createSourceSidebar();
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/alias/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/alias/mod.rs.html
index ae7f09f..04af101 100644
--- a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/alias/mod.rs.html
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/alias/mod.rs.html
@@ -228,7 +228,7 @@
matchcreate_alias_command(name, arguments[1..].to_vec(), commands, sub_state) {
Ok(_) =>CommandResult::Continue(Some("true".to_string())),
- Err(_) =>CommandResult::Continue(Some("true".to_string())),
+ Err(error) =>CommandResult::Error(error.to_string()),
}
}
}
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/array/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/array/mod.rs.html
similarity index 79%
rename from docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/array/mod.rs.html
rename to docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/array/mod.rs.html
index bf169c7..b4ae11e 100644
--- a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/array/mod.rs.html
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/array/mod.rs.html
@@ -1,4 +1,4 @@
-mod.rs.html -- source
1
+mod.rs.html -- source
1 2 3 4
@@ -118,4 +118,4 @@
})
}
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/array_length/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/array_length/mod.rs.html
new file mode 100644
index 0000000..a20b407
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/array_length/mod.rs.html
@@ -0,0 +1,133 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/mod.rs.html
new file mode 100644
index 0000000..6a17641
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/mod.rs.html
@@ -0,0 +1,41 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/range/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/range/mod.rs.html
new file mode 100644
index 0000000..7475dcf
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/collections/range/mod.rs.html
@@ -0,0 +1,169 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/net/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/net/mod.rs.html
new file mode 100644
index 0000000..2a7ea18
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/net/mod.rs.html
@@ -0,0 +1,33 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error/mod.rs.html
new file mode 100644
index 0000000..72ac35d
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error/mod.rs.html
@@ -0,0 +1,107 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error_line/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error_line/mod.rs.html
new file mode 100644
index 0000000..5925c90
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error_line/mod.rs.html
@@ -0,0 +1,107 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error_source/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error_source/mod.rs.html
new file mode 100644
index 0000000..85d331f
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/get_last_error_source/mod.rs.html
@@ -0,0 +1,107 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/mod.rs.html
new file mode 100644
index 0000000..13cb6b4
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/mod.rs.html
@@ -0,0 +1,77 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/on_error/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/on_error/mod.rs.html
new file mode 100644
index 0000000..6efe7e8
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/on_error/on_error/mod.rs.html
@@ -0,0 +1,153 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/os_family/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/os_family/mod.rs.html
new file mode 100644
index 0000000..677b179
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/os_family/mod.rs.html
@@ -0,0 +1,87 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/is_empty/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/is_empty/mod.rs.html
new file mode 100644
index 0000000..fb34f20
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/is_empty/mod.rs.html
@@ -0,0 +1,81 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/last_indexof/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/last_indexof/mod.rs.html
new file mode 100644
index 0000000..a09794c
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/last_indexof/mod.rs.html
@@ -0,0 +1,93 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/length/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/length/mod.rs.html
new file mode 100644
index 0000000..88a366f
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/length/mod.rs.html
@@ -0,0 +1,83 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim/mod.rs.html
new file mode 100644
index 0000000..2fdea64
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim/mod.rs.html
@@ -0,0 +1,81 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim_end/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim_end/mod.rs.html
new file mode 100644
index 0000000..71c2cb2
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim_end/mod.rs.html
@@ -0,0 +1,81 @@
+mod.rs.html -- source
+
\ No newline at end of file
diff --git a/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim_start/mod.rs.html b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim_start/mod.rs.html
new file mode 100644
index 0000000..4205422
--- /dev/null
+++ b/docs/api/duckscript_sdk/src/duckscriptsdk/sdk/std/string/trim_start/mod.rs.html
@@ -0,0 +1,81 @@
+mod.rs.html -- source