From ab747ae942d0421eac97b0b7d45ff1468bd26d1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20Fra=C3=9F?= Date: Sun, 19 Sep 2021 01:14:32 +0200 Subject: [PATCH] [mod] update --- .gitignore | 1 - examples/logic/eval | 27 + examples/logic/logic.tp2.json | 4 +- examples/logic/readme.md | 5 +- lib/plankton/base/licence.txt | 861 --- lib/plankton/base/logic-decl.d.ts | 386 -- lib/plankton/base/logic-impl.js | 768 --- lib/plankton/call/licence.txt | 861 --- lib/plankton/call/logic-decl.d.ts | 394 -- lib/plankton/call/logic-impl.js | 992 ---- lib/plankton/file/licence.txt | 861 --- lib/plankton/file/logic-decl.d.ts | 69 - lib/plankton/file/logic-impl.js | 261 - lib/plankton/lang/licence.txt | 861 --- lib/plankton/lang/logic-decl.d.ts | 590 -- lib/plankton/lang/logic-impl.js | 1347 ----- lib/plankton/observer/licence.txt | 861 --- lib/plankton/observer/logic-decl.d.ts | 45 - lib/plankton/observer/logic-impl.js | 103 - lib/plankton/plankton.d.ts | 1911 +++++++ lib/plankton/plankton.js | 4842 +++++++++++++++++ lib/plankton/plankton.swm.json | 16 - source/head.js | 2 + source/type2.ts | 224 +- tools/build | 4 + tools/makefile | 23 + .../update.sh => tools/update-plankton | 4 +- 27 files changed, 6898 insertions(+), 9425 deletions(-) create mode 100755 examples/logic/eval delete mode 100644 lib/plankton/base/licence.txt delete mode 100644 lib/plankton/base/logic-decl.d.ts delete mode 100644 lib/plankton/base/logic-impl.js delete mode 100644 lib/plankton/call/licence.txt delete mode 100644 lib/plankton/call/logic-decl.d.ts delete mode 100644 lib/plankton/call/logic-impl.js delete mode 100644 lib/plankton/file/licence.txt delete mode 100644 lib/plankton/file/logic-decl.d.ts delete mode 100644 lib/plankton/file/logic-impl.js delete mode 100644 lib/plankton/lang/licence.txt delete mode 100644 lib/plankton/lang/logic-decl.d.ts delete mode 100644 lib/plankton/lang/logic-impl.js delete mode 100644 lib/plankton/observer/licence.txt delete mode 100644 lib/plankton/observer/logic-decl.d.ts delete mode 100644 lib/plankton/observer/logic-impl.js create mode 100644 lib/plankton/plankton.d.ts create mode 100644 lib/plankton/plankton.js delete mode 100644 lib/plankton/plankton.swm.json create mode 100644 source/head.js create mode 100755 tools/build create mode 100644 tools/makefile rename lib/plankton/update.sh => tools/update-plankton (61%) mode change 100644 => 100755 diff --git a/.gitignore b/.gitignore index 942d017..05ca3a3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ temp/ build/ -tools/ diff --git a/examples/logic/eval b/examples/logic/eval new file mode 100755 index 0000000..b917e91 --- /dev/null +++ b/examples/logic/eval @@ -0,0 +1,27 @@ +#!/usr/bin/env python3 + +import sys as _sys +import json as _json + + +def evaluate(node): + # _sys.stderr.write("eval: %s\n" % _json.dumps(node)) + if (node["label"] == "constant"): + return node["value"][0]["data"]["value"] + elif (node["label"] == "negation"): + return (not evaluate(node["children"][0])) + elif (node["label"] == "conjunction"): + return (evaluate(node["children"][0]) and evaluate(node["children"][1])) + elif (node["label"] == "disjunction"): + return (evaluate(node["children"][0]) or evaluate(node["children"][1])) + + +def main(): + content = _sys.stdin.read() + node = _json.loads(content) + value = evaluate(node) + _sys.stdout.write(str(value) + "\n") + + +main() + diff --git a/examples/logic/logic.tp2.json b/examples/logic/logic.tp2.json index 3310fec..ddb8af4 100644 --- a/examples/logic/logic.tp2.json +++ b/examples/logic/logic.tp2.json @@ -58,7 +58,6 @@ } } ], - "parser_start": "formula", "parser_rules": [ { "label": "constant", @@ -102,6 +101,7 @@ {"type": "terminal", "parameters": {"id": "close"}} ] } - ] + ], + "parser_start": "formula" } diff --git a/examples/logic/readme.md b/examples/logic/readme.md index 5221ecb..0e08ad0 100644 --- a/examples/logic/readme.md +++ b/examples/logic/readme.md @@ -1,4 +1,5 @@ -## Example +## Usage -`echo '0&1' | node build/type2.js examples/logic/logic.tp2.json` +- `echo '0&1' | build/type2 examples/logic/logic.tp2.json` +- `echo 'not (false and true)' | build/type2 examples/logic/logic.tp2.json | examples/logic/eval` diff --git a/lib/plankton/base/licence.txt b/lib/plankton/base/licence.txt deleted file mode 100644 index e49f4d6..0000000 --- a/lib/plankton/base/licence.txt +++ /dev/null @@ -1,861 +0,0 @@ -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/lib/plankton/base/logic-decl.d.ts b/lib/plankton/base/logic-decl.d.ts deleted file mode 100644 index 2f7c15c..0000000 --- a/lib/plankton/base/logic-decl.d.ts +++ /dev/null @@ -1,386 +0,0 @@ -/** - * @author fenris - */ -declare type int = number; -/** - * @author fenris - */ -declare type float = number; -/** - * @author fenris - */ -declare type type_time = { - hours: int; - minutes: int; - seconds: int; -}; -/** - * @author fenris - */ -declare type type_pseudopointer = { - value: type_value; -}; -/** - * @author fenris - */ -declare function pseudopointer_null(): type_pseudopointer; -/** - * @author fenris - */ -declare function pseudopointer_make(value: type_value): type_pseudopointer; -/** - * @author fenris - */ -declare function pseudopointer_isset(pseudopointer: type_pseudopointer): boolean; -/** - * @author fenris - */ -declare function pseudopointer_read(pseudopointer: type_pseudopointer): type_value; -/** - * @author fenris - */ -declare function pseudopointer_write(pseudopointer: type_pseudopointer, value: type_value): void; -declare var process: any; -declare var require: any; -declare class Buffer { - constructor(x: string, modifier?: string); - toString(modifier?: string): string; -} -declare var java: any; -declare module lib_base { - /** - * @author fenris - */ - function environment(): string; -} -/** - * @author fenris - */ -declare var instance_verbosity: int; -/** - * @desc the ability to check for equality with another element of the same domain - * @author fenris - */ -interface interface_collatable { - /** - * @author fenris - */ - _collate(value: type_value): boolean; -} -/** - * @author fenris - */ -declare function instance_collate(value1: type_value, value2: type_value): boolean; -/** - * @desc the ability to compare with another element of the same domain for determining if the first is "smaller than or equal to" the latter - * @author fenris - */ -interface interface_comparable { - /** - * @author fenris - */ - _compare(value: type_value): boolean; -} -/** - * @author fenris - */ -declare function instance_compare(value1: type_value, value2: type_value): boolean; -/** - * @desc the ability to create an exact copy - * @author fenris - */ -interface interface_cloneable { - /** - * @author fenris - */ - _clone(): type_value; -} -/** - * @author fenris - */ -declare function instance_clone(value: type_value): type_value; -/** - * @author fenris - */ -interface interface_hashable { - /** - * @author fenris - */ - _hash(): string; -} -/** - * @desc the ability to generate a string out of the element, which identifies it to a high degree - * @author fenris - */ -declare function instance_hash(value: type_value): string; -/** - * @author fenris - */ -interface interface_showable { - /** - * @author fenris - */ - _show(): string; -} -/** - * @desc the ability to map the element to a textual representation (most likely not injective) - * @author fenris - */ -declare function instance_show(value: type_value): string; -/** - * @todo outsource to dedicated plankton-lib - */ -declare module lib_log { - /** - * @author fenris - */ - function log(...args: Array): void; - /** - * @author fenris - */ - function info(...args: Array): void; - /** - * @author fenris - */ - function warn(...args: Array): void; - /** - * @author fenris - */ - function error(...args: Array): void; -} -/** - * @author frac - */ -interface interface_decorator { - /** - * @author frac - */ - core: type_core; -} -/** - * @author frac - */ -declare class class_observer { - /** - * @author frac - */ - protected counter: int; - /** - * @author frac - */ - protected actions: { - [id: string]: (information: Object) => void; - }; - /** - * @author frac - */ - protected buffer: Array; - /** - * @author frac - */ - constructor(); - /** - * @author frac - */ - empty(): boolean; - /** - * @author frac - */ - flush(): void; - /** - * @author frac - */ - set(id: string, action: (information: Object) => void): void; - /** - * @author frac - */ - del(id: string): void; - /** - * @author frac - */ - add(action: (information: Object) => void): void; - /** - * @author frac - */ - notify(information?: Object, delayed?: boolean): void; - /** - * @author frac - */ - rollout(): void; -} -/** - * @author frac - */ -/** - * @author frac - */ -declare module lib_maybe { - /** - * @author fenris - */ - type type_maybe = { - kind: string; - parameters: Object; - }; - /** - * @author fenris - */ - function make_nothing(): type_maybe; - /** - * @author fenris - */ - function make_just(value: type_value): type_maybe; - /** - * @author fenris - */ - function is_nothing(maybe: type_maybe): boolean; - /** - * @author fenris - */ - function is_just(maybe: type_maybe): boolean; - /** - * @author fenris - */ - function cull(maybe: type_maybe): type_value; - /** - * @author fenris - */ - function propagate(maybe: type_maybe, function_: (value: type_value) => type_maybe): type_maybe; -} -/** - * @author fenris - */ -declare class class_maybe implements interface_showable { - /** - * @desc whether the wrapper is nothing - * @author fenris - */ - is_nothing(): boolean; - /** - * @desc whether the wrapper is just - * @author fenris - */ - is_just(): boolean; - /** - * @desc return the value, stored in the maybe-wrapper - * @author fenris - */ - cull(): type_value; - /** - * @author fenris - */ - toString(): string; - /** - * @author fenris - */ - distinguish(action_just: (value?: type_value) => void, action_nothing?: (reason?: string) => void): void; - /** - * @author fenris - */ - propagate(action: (value: type_value) => class_maybe): class_maybe; - /** - * @desc [implementation] - * @author fenris - */ - _show(): string; -} -/** - * @author fenris - */ -declare class class_nothing extends class_maybe { - /** - * @author fenris - */ - private reason; - /** - * @author fenris - */ - constructor(reason?: string); - /** - * @author fenris - */ - is_nothing(): boolean; - /** - * @author fenris - */ - is_just(): boolean; - /** - * @author fenris - */ - cull(): type_value; - /** - * @author fenris - */ - toString(): string; - /** - * @author fenris - */ - reason_get(): string; - /** - * @author fenris - */ - distinguish(action_just: (value?: type_value) => void, action_nothing?: (reason?: string) => void): void; - /** - * @author fenris - */ - propagate(action: (value: type_value) => class_maybe): class_maybe; -} -/** - * @author fenris - */ -declare class class_just extends class_maybe { - /** - * @author fenris - */ - private value; - /** - * @author fenris - */ - constructor(value: type_value); - /** - * @author fenris - */ - is_nothing(): boolean; - /** - * @author fenris - */ - is_just(): boolean; - /** - * @author fenris - */ - cull(): type_value; - /** - * @author fenris - */ - toString(): string; - /** - * @author fenris - */ - distinguish(action_just: (value?: type_value) => void, action_nothing?: (reason?: string) => void): void; - /** - * @author fenris - */ - propagate(action: (value: type_value) => class_maybe): class_maybe; -} -/** - * @author frac - */ -declare class class_error extends Error { - /** - * @author frac - */ - protected suberrors: Array; - /** - * @author frac - */ - protected mess: string; - /** - * @author frac - */ - constructor(message: string, suberrors?: Array); - /** - * @override - * @author frac - */ - toString(): string; -} diff --git a/lib/plankton/base/logic-impl.js b/lib/plankton/base/logic-impl.js deleted file mode 100644 index bd8a923..0000000 --- a/lib/plankton/base/logic-impl.js +++ /dev/null @@ -1,768 +0,0 @@ -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -// } -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -/** - * @author fenris - */ -/*export*/ function pseudopointer_null() { - return { - "value": null - }; -} -/** - * @author fenris - */ -/*export*/ function pseudopointer_make(value) { - return { - "value": value - }; -} -/** - * @author fenris - */ -/*export*/ function pseudopointer_isset(pseudopointer) { - return (pseudopointer.value != null); -} -/** - * @author fenris - */ -/*export*/ function pseudopointer_read(pseudopointer) { - if (pseudopointer.value != null) { - return pseudopointer.value; - } - else { - var message = "nullpointer dereferencation"; - throw (new Error(message)); - } -} -/** - * @author fenris - */ -/*export*/ function pseudopointer_write(pseudopointer, value) { - pseudopointer.value = value; -} -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -; -var lib_base; -(function (lib_base) { - /** - * @author fenris - */ - function environment() { - var entries = [ - { - "id": "web", - "name": "Web", - "predicate": function () { return (typeof (document) !== "undefined"); } - }, - { - "id": "node", - "name": "Node.js", - "predicate": function () { return (typeof (process) !== "undefined"); } - }, - { - "id": "rhino", - "name": "Rhino", - "predicate": function () { return (typeof (java) !== "undefined"); } - }, - { - "id": "webworker", - "name": "WebWorker", - "predicate": function () { return (typeof (self["WorkerNavigator"]) !== "undefined"); } - } - ]; - var id; - var found = entries.some(function (entry) { - if (entry.predicate()) { - id = entry.id; - return true; - } - else { - return false; - } - }); - if (found) { - return id; - } - else { - throw (new Error("unknown environment")); - } - } - lib_base.environment = environment; -})(lib_base || (lib_base = {})); -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -/** - * @author fenris - */ -var instance_verbosity = 0; -/** - * @author fenris - */ -function instance_collate(value1, value2) { - if (typeof (value1) === "object") { - if (value1 == null) { - return (value2 == null); - } - else { - if ("_collate" in value1) { - return value1["_collate"](value2); - } - else { - throw (new Error("[collate]" + " " + "object has no such method")); - } - } - } - else { - if (instance_verbosity >= 1) { - lib_log.warn("[collate]" + " " + "primitive value; using default implementation"); - } - return (value1 === value2); - } -} -/** - * @author fenris - */ -function instance_compare(value1, value2) { - if (typeof (value1) === "object") { - if ("_compare" in value1) { - return value1["_compare"](value2); - } - else { - throw (new Error("[compare]" + " " + "object has no such method")); - } - } - else { - if (instance_verbosity >= 1) { - lib_log.warn("[compare]" + " " + "primitive value; using default implementation"); - } - return (value1 <= value2); - } -} -/** - * @author fenris - */ -function instance_clone(value) { - if (typeof (value) === "object") { - if ("_clone" in value) { - return value["_clone"](); - } - else { - throw (new Error("[clone]" + " " + "object has no such method")); - } - } - else { - if (instance_verbosity >= 1) { - lib_log.warn("[clone]" + " " + "primitive value; using default implementation"); - } - return value; - } -} -/** - * @desc the ability to generate a string out of the element, which identifies it to a high degree - * @author fenris - */ -function instance_hash(value) { - if (typeof (value) === "object") { - if ("_hash" in value) { - return value["_hash"](); - } - else { - throw (new Error("[hash]" + " " + "object has no such method")); - } - } - else { - if (instance_verbosity >= 1) { - lib_log.warn("[hash]" + " " + "primitive value; using default implementation"); - } - return String(value); - } -} -/** - * @desc the ability to map the element to a textual representation (most likely not injective) - * @author fenris - */ -function instance_show(value) { - if (typeof (value) === "object") { - if (value == null) { - return "NULL"; - } - else { - if ("_show" in value) { - return value["_show"](); - } - else { - // throw (new Error("[show]" + " " + "object has no such method")); - return JSON.stringify(value); - } - } - } - else { - if (instance_verbosity >= 1) { - lib_log.warn("[show]" + " " + "primitive value; using default implementation"); - } - return String(value); - } -} -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -/** - * @todo outsource to dedicated plankton-lib - */ -var lib_log; -(function (lib_log) { - /** - * @author fenris - */ - function log() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - /*window.*/ console.log.apply(console, args); - } - lib_log.log = log; - /** - * @author fenris - */ - function info() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - /*window.*/ console.info.apply(console, args); - } - lib_log.info = info; - /** - * @author fenris - */ - function warn() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - /*window.*/ console.warn.apply(console, args); - } - lib_log.warn = warn; - /** - * @author fenris - */ - function error() { - var args = []; - for (var _i = 0; _i < arguments.length; _i++) { - args[_i] = arguments[_i]; - } - /*window.*/ console.error.apply(console, args); - } - lib_log.error = error; -})(lib_log || (lib_log = {})); -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -/** - * @author frac - */ -var class_observer = /** @class */ (function () { - /** - * @author frac - */ - function class_observer() { - this.counter = 0; - this.actions = {}; - this.buffer = []; - } - /** - * @author frac - */ - class_observer.prototype.empty = function () { - return (Object.keys(this.actions).length == 0); - }; - /** - * @author frac - */ - class_observer.prototype.flush = function () { - this.actions = {}; - }; - /** - * @author frac - */ - class_observer.prototype.set = function (id, action) { - this.actions[id] = action; - }; - /** - * @author frac - */ - class_observer.prototype.del = function (id) { - delete this.actions[id]; - }; - /** - * @author frac - */ - class_observer.prototype.add = function (action) { - this.set((this.counter++).toString(), action); - }; - /** - * @author frac - */ - class_observer.prototype.notify = function (information, delayed) { - var _this = this; - if (information === void 0) { information = {}; } - if (delayed === void 0) { delayed = false; } - if (delayed) { - this.buffer.push(information); - } - else { - Object.keys(this.actions).forEach(function (id) { return _this.actions[id](information); }); - } - }; - /** - * @author frac - */ - class_observer.prototype.rollout = function () { - var _this = this; - this.buffer.forEach(function (information) { return _this.notify(information, false); }); - this.buffer = []; - }; - return class_observer; -}()); -/** - * @author frac - */ -/* -export interface interface_readable { - - |** - * @author frac - *| - read() : type_executor; - -} - */ -/** - * @author frac - */ -/* -export interface interface_writeable { - - |** - * @author frac - *| - write(value : type_value) : type_executor; - -} - */ -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -var lib_maybe; -(function (lib_maybe) { - /** - * @author fenris - */ - function make_nothing() { - return { - "kind": "nothing", - "parameters": {} - }; - } - lib_maybe.make_nothing = make_nothing; - /** - * @author fenris - */ - function make_just(value) { - return { - "kind": "just", - "parameters": { - "value": value - } - }; - } - lib_maybe.make_just = make_just; - /** - * @author fenris - */ - function is_nothing(maybe) { - return (maybe.kind === "nothing"); - } - lib_maybe.is_nothing = is_nothing; - /** - * @author fenris - */ - function is_just(maybe) { - return (maybe.kind === "just"); - } - lib_maybe.is_just = is_just; - /** - * @author fenris - */ - function cull(maybe) { - if (!is_just(maybe)) { - var message = "cull from nothing"; - throw (new Error(message)); - } - else { - var value = maybe.parameters["value"]; - return value; - } - } - lib_maybe.cull = cull; - /** - * @author fenris - */ - function propagate(maybe, function_) { - if (!is_just(maybe)) { - } - else { - var value = maybe.parameters["value"]; - var maybe_ = function_(value); - return maybe_; - } - } - lib_maybe.propagate = propagate; -})(lib_maybe || (lib_maybe = {})); -/** - * @author fenris - */ -/*export*/ var class_maybe = /** @class */ (function () { - function class_maybe() { - } - /** - * @desc whether the wrapper is nothing - * @author fenris - */ - class_maybe.prototype.is_nothing = function () { - throw (new Error("not implemented: class_maybe.is_nothing")); - }; - /** - * @desc whether the wrapper is just - * @author fenris - */ - class_maybe.prototype.is_just = function () { - throw (new Error("not implemented: class_maybe.is_just")); - }; - /** - * @desc return the value, stored in the maybe-wrapper - * @author fenris - */ - class_maybe.prototype.cull = function () { - throw (new Error("not implemented: class_maybe.cull")); - }; - /** - * @author fenris - */ - class_maybe.prototype.toString = function () { - throw (new Error("not implemented: class_maybe.cull")); - }; - /** - * @author fenris - */ - class_maybe.prototype.distinguish = function (action_just, action_nothing) { - if (action_nothing === void 0) { action_nothing = function () { }; } - throw (new Error("not implemented: class_maybe.distinguish")); - }; - /** - * @author fenris - */ - class_maybe.prototype.propagate = function (action) { - throw (new Error("not implemented: class_maybe.propagate")); - }; - /** - * @desc [implementation] - * @author fenris - */ - class_maybe.prototype._show = function () { - return this.toString(); - }; - return class_maybe; -}()); -/** - * @author fenris - */ -/*export*/ var class_nothing = /** @class */ (function (_super) { - __extends(class_nothing, _super); - /** - * @author fenris - */ - function class_nothing(reason) { - if (reason === void 0) { reason = null; } - var _this = _super.call(this) || this; - _this.reason = reason; - return _this; - } - /** - * @author fenris - */ - class_nothing.prototype.is_nothing = function () { - return true; - }; - /** - * @author fenris - */ - class_nothing.prototype.is_just = function () { - return false; - }; - /** - * @author fenris - */ - class_nothing.prototype.cull = function () { - var message = "you shouldn't cull a nothing-value …"; - lib_log.warn(message); - return null; - }; - /** - * @author fenris - */ - class_nothing.prototype.toString = function () { - return "<\u00B7>"; - }; - /** - * @author fenris - */ - class_nothing.prototype.reason_get = function () { - var content = ((this.reason == null) ? "·" : this.reason); - return "<- " + content + " ->"; - }; - /** - * @author fenris - */ - class_nothing.prototype.distinguish = function (action_just, action_nothing) { - if (action_nothing === void 0) { action_nothing = function () { }; } - action_nothing(this.reason); - }; - /** - * @author fenris - */ - class_nothing.prototype.propagate = function (action) { - return (new class_nothing(this.reason)); - }; - return class_nothing; -}(class_maybe)); -/** - * @author fenris - */ -/*export*/ var class_just = /** @class */ (function (_super) { - __extends(class_just, _super); - /** - * @author fenris - */ - function class_just(value) { - var _this = _super.call(this) || this; - _this.value = value; - return _this; - } - /** - * @author fenris - */ - class_just.prototype.is_nothing = function () { - return false; - }; - /** - * @author fenris - */ - class_just.prototype.is_just = function () { - return true; - }; - /** - * @author fenris - */ - class_just.prototype.cull = function () { - return this.value; - }; - /** - * @author fenris - */ - class_just.prototype.toString = function () { - var content = instance_show(this.value); - return "<+ " + content + " +>"; - }; - /** - * @author fenris - */ - class_just.prototype.distinguish = function (action_just, action_nothing) { - if (action_nothing === void 0) { action_nothing = function () { }; } - action_just(this.value); - }; - /** - * @author fenris - */ - class_just.prototype.propagate = function (action) { - return action(this.value); - }; - return class_just; -}(class_maybe)); -/* -This file is part of »bacterio-plankton:base«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:base« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:base« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:base«. If not, see . - */ -/** - * @author frac - */ -var class_error = /** @class */ (function (_super) { - __extends(class_error, _super); - /** - * @author frac - */ - function class_error(message, suberrors) { - if (suberrors === void 0) { suberrors = []; } - var _this = _super.call(this, message) || this; - _this.suberrors = suberrors; - _this.mess = message; - return _this; - } - /** - * @override - * @author frac - */ - class_error.prototype.toString = function () { - return ( /*super.toString()*/this.mess + " " + ("[" + this.suberrors.map(function (x) { return x.toString(); }).join(",") + "]")); - }; - return class_error; -}(Error)); diff --git a/lib/plankton/call/licence.txt b/lib/plankton/call/licence.txt deleted file mode 100644 index d272b7d..0000000 --- a/lib/plankton/call/licence.txt +++ /dev/null @@ -1,861 +0,0 @@ -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/lib/plankton/call/logic-decl.d.ts b/lib/plankton/call/logic-decl.d.ts deleted file mode 100644 index aaf4411..0000000 --- a/lib/plankton/call/logic-decl.d.ts +++ /dev/null @@ -1,394 +0,0 @@ -declare module lib_call { - /** - * @desc hacked class for postfix function application - * @author fenris - */ - class class_valuewrapper { - /** - * @author fenris - */ - protected value: type_value; - /** - * @desc [constructor] - * @author fenris - */ - constructor(value: type_value); - /** - * @desc [accessor] applies a function and returns a new valuewrapper - * @author fenris - */ - pass(function_: (value: type_value) => type_value_): class_valuewrapper; - /** - * @desc [accessor] gives the wrapped value - * @author fenris - */ - extract(): type_value; - } - /** - * @desc shortcut for constructing a valuewrapper-object - * @author fenris - */ - function vw(value: type_value): class_valuewrapper; - /** - * @author fenris - */ - function use(input: type_input, function_: (input: type_input) => type_output): type_output; - /** - * @desc just the identity; useful for some callbacks etc. - * @author fenris - */ - function id(x: type_value): type_value; - /** - * @desc composes two functions (i.e. returns a function that return the result of the successive execution of both input-functions) - * @param {function} function_f - * @param {function} function_g - * @author fenris - */ - function compose(function_f: (type_x: any) => type_y, function_g: (type_y: any) => type_z): (value: type_x) => type_z; - /** - * @desc transforms a function with sequential input into a function with leveled input; example: add(2,3) = curryfy(add)(2)(3) - * @param {function} f - * @param {int} n (don't set manually) - * @return {function} the currified version of the in put function - * @author fenris - */ - function curryfy(f: Function, n?: int): Function; -} -declare module lib_call { - /** - * @author fenris - */ - type type_executor = ((resolve: (result?: type_result) => any, reject?: (reason?: type_reason) => void) => void); - /** - * @author fenris - */ - function executor_resolve(result: type_result): type_executor; - /** - * @author fenris - */ - function executor_reject(reason: type_reason): type_executor; - /** - * @author fenris - */ - function executor_transform(executor: type_executor, transform_result: (result_from: type_result_from) => type_result_to, transform_reason: (error_from: type_error_from) => type_error_to): type_executor; - /** - * @author fenris - */ - function executor_transform_default(executor: type_executor, transform_result: (result_from: type_result_from) => type_result_to, wrap_string?: string): type_executor; - /** - * @author fenris - */ - function executor_compose_sequential(first: type_executor, second: (result: type_result_first) => type_executor): type_executor; - /** - * @author fenris - */ - function executor_chain(state: type_state, executors: Array<(state: type_state) => type_executor>): type_executor; - /** - * @author fenris - */ - function executor_first(executors: Array>): type_executor>; - /** - * @author fenris - */ - function executor_condense(executors: Array>): type_executor, Error>; - /** - * @author fenris - * @deprecated use condense - */ - function executor_filter(executors: Array>, predicate: (element: type_element) => boolean): type_executor, Error>; - /** - * @author fenris - * @deprecated use condense - */ - function executor_map(executors: Array>, transformator: (element1: type_element1) => type_element2): type_executor, Error>; - /** - * @author fenris - * @deprecated use condense - */ - function executor_reduce(executors: Array>, initial: type_result, accumulator: (result: type_result, element: type_element) => type_result): type_executor; -} -declare module lib_call { - /** - * @author fenris - */ - type type_promise = Promise; - /** - * @author fenris - */ - function promise_reject(reason: type_reason): type_promise; - /** - * @author fenris - */ - function promise_resolve(result: type_result): type_promise; - /** - * @author fenris - */ - function promise_make(executor: (resolve: (result?: type_result) => void, reject: (reason?: type_reason) => void) => void): type_promise; - /** - * @author fenris - */ - function promise_then_close(promise: type_promise, resolver: (result: type_result) => void, rejector: (reason: type_reason) => void): void; - /** - * @author fenris - */ - function promise_then_append(promise: type_promise, resolver: (result: type_result) => type_promise, rejector?: (reason: type_reason) => type_promise): type_promise; - /** - * @author fenris - */ - function promise_all(promises: Array>): type_promise, type_reason>; - /** - * @author fenris - */ - function promise_chain(promises: Array<(input: type_result) => type_promise>, start?: type_result): type_promise; - /** - * @author fenris - */ - function promise_condense(promises: Array<() => type_promise>): type_promise, type_reason>; - /** - * @author fenris - */ - function promise_group(promises: { - [name: string]: () => type_promise; - }, serial?: boolean): type_promise<{ - [name: string]: any; - }, type_reason>; - /** - * @author fenris - */ - function promise_wrap(promise: type_promise, transformator_result: (reason: type_result_inner) => type_result_outer, transformator_reason?: (reason: type_reason) => type_reason): Promise; - /** - * @author fenris - */ - function promise_show(label: string): (result: type_result) => type_promise; - /** - * @author fenris - */ - function promise_log(result: type_result): (result: type_result) => type_promise; - /** - * @author fenris - */ - function promise_attach(state: { - [name: string]: any; - }, promise: type_promise, name: string): type_promise<{ - [name: string]: any; - }, type_reason>; - /** - * @author fenris - */ - function promise_delay(promise: type_promise, delay: int): Promise; - /** - * @author fenris - */ - function promise_to_executor(promise: type_promise): type_executor; -} -declare module lib_call { - /** - * @author fenris - */ - type type_initializer_state = int; - const initializer_state_initial: type_initializer_state; - const initializer_state_waiting: type_initializer_state; - const initializer_state_successful: type_initializer_state; - const initializer_state_failed: type_initializer_state; - /** - * @author fenris - */ - type type_initializer = { - fetcher: () => type_promise; - state?: type_initializer_state; - queue: Array<{ - resolve: (result?: type_result) => void; - reject: (reason?: type_reason) => void; - }>; - result?: type_result; - reason?: type_reason; - }; - /** - * @author fenris - */ - function initializer_make(fetcher: () => type_promise): type_initializer; - /** - * @author fenris - */ - function initializer_reset(subject: type_initializer): void; - /** - * @author fenris - */ - function initializer_state(subject: type_initializer): type_initializer_state; - /** - * @author fenris - */ - function initializer_get(subject: type_initializer): type_promise; -} -declare module lib_call { - /** - * @author fenris - */ - type type_deferral = { - representation: (input: type_input) => Promise; - }; - /** - * @author fenris - * @desc activates the deferral and handles its output according to a given procedure - * @param {(value : type_value)=>void} procedure a function which receives the output of the deferral as argument - */ - function deferral_use(deferral: type_deferral, input: type_input, procedure: (output: type_output) => void): void; - /** - * @author fenris - * @desc creates a deferral-subject (similar to "new Promise", where "convey" reflects "resolve"/"reject") - */ - function deferral_make(handler: (input: type_input, convey: (output: type_output) => void) => void): type_deferral; - /** - * @author fenris - * @desc wraps a simple function into a deferral (similar to "Promise.resolve"/"Promise.reject") - */ - function deferral_wrap(function_: (input: type_input) => type_output): type_deferral; - /** - * @author fenris - */ - function deferral_id(): type_deferral; - /** - * @author fenris - */ - function deferral_const(value: type_value): type_deferral; - /** - * @author fenris - */ - function deferral_delay(output: type_output, delay: int): type_deferral; - /** - * @author fenris - * @desc connects two deferrals to form a new one; the output of the first is taken as input for the second - * (similar to "Promise.then" when passing a function which returns a new promise) - * @param {type_deferral} first a simple deferral - * @param {(value1 : type_value1)=>type_deferral} second a function depending from a value returning a deferral - */ - function deferral_compose_serial(first: type_deferral, second: type_deferral): type_deferral; - /** - * @author fenris - */ - function deferral_compose_parallel({ "left": deferral_left, "right": deferral_right, }: { - left: type_deferral; - right: type_deferral; - }): type_deferral; - /** - * @author fenris - * @desc repeatedly applied serial composition - */ - function deferral_chain(members: Array>): type_deferral; - /** - * @author fenris - */ -} -declare module lib_call { - /** - * @author fenris - */ - class class_deferral { - /** - * @author fenris - */ - private subject; - /** - * @author fenris - */ - private constructor(); - /** - * @author fenris - */ - private static _cram; - /** - * @author fenris - */ - private static _tear; - /** - * @author fenris - */ - static make(handler: (input: type_input, convey: (value: type_output) => void) => void): class_deferral; - /** - * @author fenris - */ - use(input: type_input, procedure: (value: type_output) => void): void; - /** - * @author fenris - */ - compose_serial(second: class_deferral): class_deferral; - /** - * @author fenris - */ - static chain(members: Array>): class_deferral; - /** - * @author fenris - */ - static wrap(function_: (input: type_input) => type_output): class_deferral; - /** - * @author fenris - */ - static const_(value: type_value): class_deferral; - /** - * @author fenris - */ - static delay(output: type_output, delay: int): class_deferral; - } -} -declare module lib_call { - /** - * @author fenris - */ - function timeout(function_: () => void, delay: int): int; - /** - * @desc a definition for a value being "defined" - * @author neuc - */ - function is_def(obj: type_value, null_is_valid?: boolean): boolean; - /** - * @desc returns the value if set and, when a type is specified, if the type is correct, if not return default_value - * @author neuc - */ - function def_val(value: any, default_value: any, type?: string, null_is_valid?: boolean): any; - /** - * @desc just the empty function; useful for some callbacks etc. - * @author fenris - */ - function nothing(): void; - /** - * @desc outputs - * @author fenris - */ - function output(...args: Array): void; - /** - * @desc converts the "arguments"-map into an array - * @param {Object} args - * @author fenris - */ - function args2list(args: any): Array; - /** - * @desc provides the call for an attribute of a class as a regular function - * @param {string} name the name of the attribute - * @return {*} - * @author fenris - */ - function attribute(name: string): (object: type_object) => type_attribute; - /** - * @desc provides a method of a class as a regular function - * @param {string} name the name of the method - * @return {function} - * @author fenris - */ - function method(name: string): (object: type_object) => type_output; - /** - * @author fenris - */ - type type_unival = { - kind: string; - data?: any; - }; - /** - * @author fenris - */ - function distinguish(unival: type_unival, handlers: { - [kind: string]: (data?: any) => any; - }, fallback?: (unival?: type_unival) => any): any; -} diff --git a/lib/plankton/call/logic-impl.js b/lib/plankton/call/logic-impl.js deleted file mode 100644 index 77525f9..0000000 --- a/lib/plankton/call/logic-impl.js +++ /dev/null @@ -1,992 +0,0 @@ -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -"use strict"; -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -var lib_call; -(function (lib_call) { - /** - * @desc hacked class for postfix function application - * @author fenris - */ - class class_valuewrapper { - /** - * @desc [constructor] - * @author fenris - */ - constructor(value) { - this.value = value; - } - /** - * @desc [accessor] applies a function and returns a new valuewrapper - * @author fenris - */ - pass(function_) { - return (new class_valuewrapper(function_(this.value))); - } - /** - * @desc [accessor] gives the wrapped value - * @author fenris - */ - extract() { - return this.value; - } - } - lib_call.class_valuewrapper = class_valuewrapper; - /** - * @desc shortcut for constructing a valuewrapper-object - * @author fenris - */ - function vw(value) { - return (new class_valuewrapper(value)); - } - lib_call.vw = vw; - /** - * @author fenris - */ - function use(input, function_) { - return function_(input); - } - lib_call.use = use; - /** - * @desc just the identity; useful for some callbacks etc. - * @author fenris - */ - function id(x) { - return x; - } - lib_call.id = id; - /** - * @desc composes two functions (i.e. returns a function that return the result of the successive execution of both input-functions) - * @param {function} function_f - * @param {function} function_g - * @author fenris - */ - function compose(function_f, function_g) { - return (function (x) { - // return function_g(function_f(x)); - return function_g(function_f.apply(function_f, lib_call.args2list(arguments))); - }); - } - lib_call.compose = compose; - /** - * @desc transforms a function with sequential input into a function with leveled input; example: add(2,3) = curryfy(add)(2)(3) - * @param {function} f - * @param {int} n (don't set manually) - * @return {function} the currified version of the in put function - * @author fenris - */ - function curryfy(f, n = f.length) { - switch (n) { - case 0: { - throw (new Error("[curryfy] impossible")); - // break; - } - case 1: { - return f; - // break; - } - default: { - return (function (x) { - return (curryfy(function () { return f.apply(f, [x].concat(lib_call.args2list(arguments))); }, n - 1)); - }); - // break; - } - } - } - lib_call.curryfy = curryfy; -})(lib_call || (lib_call = {})); -var lib_call; -(function (lib_call) { - /** - * @author fenris - */ - function executor_resolve(result) { - return ((resolve, reject) => resolve(result)); - } - lib_call.executor_resolve = executor_resolve; - /** - * @author fenris - */ - function executor_reject(reason) { - return ((resolve, reject) => reject(reason)); - } - lib_call.executor_reject = executor_reject; - /** - * @author fenris - */ - function executor_transform(executor, transform_result, transform_reason) { - return ((resolve, reject) => { - executor(result => resolve(transform_result(result)), reason => reject(transform_reason(reason))); - }); - } - lib_call.executor_transform = executor_transform; - /** - * @author fenris - */ - function executor_transform_default(executor, transform_result, wrap_string = null) { - let transform_reason = (error => ((wrap_string == null) ? error : new class_error(wrap_string, [error]))); - return (executor_transform(executor, transform_result, transform_reason)); - } - lib_call.executor_transform_default = executor_transform_default; - /** - * @author fenris - */ - function executor_compose_sequential(first, second) { - return ((resolve, reject) => { - first(result => { - second(result)(resolve, reject); - }, reason => { - reject(reason); - }); - }); - } - lib_call.executor_compose_sequential = executor_compose_sequential; - /** - * @author fenris - */ - function executor_chain(state, executors) { - return ((resolve, reject) => { - if (executors.length == 0) { - return resolve(state); - } - else { - return executors[0](state)(result => { - executor_chain(result, executors.slice(1))(resolve, reject); - }, reject); - } - }); - /* - */ - /* - if (executors.length == 0) { - return executor_resolve(state); - } - else if (executors.length == 1) { - return executors[0](state); - } - else { - return ( - executor_chain( - state, - [ - state => (resolve, reject) => executors[0](state)(result => executors[1](result)(resolve, reject), reject) - ].concat(executors.slice(2)) - ) - ); - } - */ - /* - return ( - executors.reduce( - (chain, current) => executor_compose_sequential(chain, current, deferred), - executor_resolve(state) - ) - ); - */ - } - lib_call.executor_chain = executor_chain; - /** - * @author fenris - */ - function executor_first(executors) { - /* - return ( - (resolve, reject) => { - if (executors.length == 0) { - reject(new Error("all failed")); - } - else { - executors[0]( - result => { - resolve(result); - }, - reason => { - executor_first(executors.slice(1))(resolve, reject); - } - ) - } - } - ); - */ - return ((resolve, reject) => { - executor_chain([], executors.map(executor => reasons => (resolve_, reject_) => { - executor(result => reject_(result), reason => resolve_(reasons.concat([reason]))); - }))(errors => reject(errors), result => resolve(result)); - }); - } - lib_call.executor_first = executor_first; - /** - * @author fenris - */ - function executor_condense(executors) { - return (executor_chain([], executors.map(executor => result => (resolve, reject) => { - executor(element => resolve(result.concat([element])), reject); - }))); - } - lib_call.executor_condense = executor_condense; - /** - * @author fenris - * @deprecated use condense - */ - function executor_filter(executors, predicate) { - return (executor_chain([], executors.map(executor => result => (resolve, reject) => { - executor(element => resolve(predicate(element) ? result.concat([element]) : result), reject); - }))); - } - lib_call.executor_filter = executor_filter; - /** - * @author fenris - * @deprecated use condense - */ - function executor_map(executors, transformator) { - return (executor_chain([], executors.map(executor => result => (resolve, reject) => { - executor(element1 => resolve(result.concat([transformator(element1)])), reject); - }))); - } - lib_call.executor_map = executor_map; - /** - * @author fenris - * @deprecated use condense - */ - function executor_reduce(executors, initial, accumulator) { - return (executor_chain(initial, executors.map(executor => result => (resolve, reject) => { - executor(element => resolve(accumulator(result, element)), reject); - }))); - } - lib_call.executor_reduce = executor_reduce; -})(lib_call || (lib_call = {})); -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -var lib_call; -(function (lib_call) { - /** - * @author fenris - */ - function promise_reject(reason) { - return Promise.reject(reason); - } - lib_call.promise_reject = promise_reject; - /** - * @author fenris - */ - function promise_resolve(result) { - return Promise.resolve(result); - } - lib_call.promise_resolve = promise_resolve; - /** - * @author fenris - */ - function promise_make(executor) { - return (new Promise(executor)); - } - lib_call.promise_make = promise_make; - /** - * @author fenris - */ - function promise_then_close(promise, resolver, rejector) { - promise.then(resolver, rejector); - } - lib_call.promise_then_close = promise_then_close; - /** - * @author fenris - */ - function promise_then_append(promise, resolver, rejector = null) { - if (rejector == null) { - rejector = (reason) => promise_reject(reason); - } - return (promise.then(resolver, rejector)); - } - lib_call.promise_then_append = promise_then_append; - /** - * @author fenris - */ - function promise_all(promises) { - return Promise.all(promises); - } - lib_call.promise_all = promise_all; - /** - * @author fenris - */ - function promise_chain(promises, start = undefined) { - return (promises.reduce((chain, promise) => promise_then_append(chain, promise), promise_resolve(start))); - } - lib_call.promise_chain = promise_chain; - /** - * @author fenris - */ - function promise_condense(promises) { - return (promise_chain(promises.map(promise => result => promise_then_append(promise(), element => promise_resolve(result.concat([element])))), [])); - } - lib_call.promise_condense = promise_condense; - /** - * @author fenris - */ - function promise_group(promises, serial = false) { - const decorate = function (promise, name) { - return (() => promise_then_append(promise(), value => promise_resolve({ "key": name, "value": value }))); - }; - const convert = function (array) { - let object = {}; - array.forEach(({ "key": key, "value": value }) => { object[key] = value; }); - return object; - }; - if (serial) { - return (promise_then_append(promise_condense(Object.keys(promises) - .map(name => decorate(promises[name], name))), list => promise_resolve(convert(list)))); - } - else { - return (promise_then_append(promise_all(Object.keys(promises) - .map(name => decorate(promises[name], name)) - .map(promise => promise())), list => promise_resolve(convert(list)))); - } - } - lib_call.promise_group = promise_group; - /** - * @author fenris - */ - function promise_wrap(promise, transformator_result, transformator_reason = lib_call.id) { - return (promise_make((resolve, reject) => { - promise_then_close(promise, result => resolve(transformator_result(result)), reason => reject(transformator_reason(reason))); - })); - } - lib_call.promise_wrap = promise_wrap; - /** - * @author fenris - */ - function promise_show(label) { - return (result => promise_make((resolve, reject) => { - lib_log.info(label + ": " + instance_show(result)); - resolve(result); - })); - } - lib_call.promise_show = promise_show; - /** - * @author fenris - */ - function promise_log(result) { - return promise_show("log"); - } - lib_call.promise_log = promise_log; - /** - * @author fenris - */ - function promise_attach(state, promise, name) { - return (promise_wrap(promise, result => { - state[name] = result; - return state; - })); - } - lib_call.promise_attach = promise_attach; - /** - * @author fenris - */ - function promise_delay(promise, delay) { - return promise_make((resolve, reject) => { - lib_call.timeout(() => { - promise_then_close(promise, resolve, reject); - return null; - }, delay); - }); - } - lib_call.promise_delay = promise_delay; - /** - * @author fenris - */ - function promise_to_executor(promise) { - return ((resolve, reject) => promise.then(resolve, reject)); - } - lib_call.promise_to_executor = promise_to_executor; -})(lib_call || (lib_call = {})); -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -var lib_call; -(function (lib_call) { - lib_call.initializer_state_initial = 0; - lib_call.initializer_state_waiting = 1; - lib_call.initializer_state_successful = 2; - lib_call.initializer_state_failed = 3; - /** - * @author fenris - */ - function initializer_make(fetcher) { - let subject = { - "fetcher": fetcher, - "state": lib_call.initializer_state_initial, - "queue": [], - "result": undefined, - "reason": undefined, - }; - return subject; - } - lib_call.initializer_make = initializer_make; - /** - * @author fenris - */ - function initializer_actuate(subject) { - switch (subject.state) { - case lib_call.initializer_state_successful: { - subject.queue.forEach(entry => entry.resolve(subject.result)); - break; - } - case lib_call.initializer_state_failed: { - subject.queue.forEach(entry => entry.reject(subject.reason)); - break; - } - default: { - let message = `unhandled state ${subject.state}`; - throw (new Error(message)); - break; - } - } - } - /** - * @author fenris - */ - function initializer_reset(subject) { - subject.state = lib_call.initializer_state_initial; - subject.queue = []; - } - lib_call.initializer_reset = initializer_reset; - /** - * @author fenris - */ - function initializer_state(subject) { - return subject.state; - } - lib_call.initializer_state = initializer_state; - /** - * @author fenris - */ - function initializer_get(subject) { - switch (subject.state) { - case lib_call.initializer_state_initial: { - subject.state = lib_call.initializer_state_waiting; - return (lib_call.promise_make((resolve, reject) => { - subject.queue.push({ "resolve": resolve, "reject": reject }); - subject.fetcher().then(result => { - subject.state = lib_call.initializer_state_successful; - subject.result = result; - initializer_actuate(subject); - }, reason => { - subject.state = lib_call.initializer_state_failed; - subject.reason = reason; - initializer_actuate(subject); - }); - })); - break; - } - case lib_call.initializer_state_waiting: { - return (lib_call.promise_make((resolve, reject) => { - subject.queue.push({ "resolve": resolve, "reject": reject }); - })); - break; - } - case lib_call.initializer_state_successful: { - return (lib_call.promise_resolve(subject.result)); - break; - } - case lib_call.initializer_state_failed: { - return (lib_call.promise_reject(subject.reason)); - break; - } - default: { - let message = `unhandled state ${subject.state}`; - throw (new Error(message)); - break; - } - } - } - lib_call.initializer_get = initializer_get; - /** - * @author fenris - */ - function initializer_get_sync(subject) { - switch (subject.state) { - case lib_call.initializer_state_successful: { - return subject.result; - break; - } - case lib_call.initializer_state_failed: { - throw subject.reason; - break; - } - default: { - let message = `unhandled state ${subject.state}`; - throw (new Error(message)); - break; - } - } - } - /** - * @author fenris - */ - function initializer_set_sync(subject, result) { - switch (subject.state) { - case lib_call.initializer_state_successful: { - subject.result = result; - break; - } - case lib_call.initializer_state_failed: { - subject.state = lib_call.initializer_state_successful; - subject.result = result; - break; - } - default: { - let message = `unhandled state ${subject.state}`; - throw (new Error(message)); - break; - } - } - } -})(lib_call || (lib_call = {})); -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -var lib_call; -(function (lib_call) { - /* - The core idea of this library is to provide means for asynchronous program flow. The old-school way to do is, - is to use callbacks. While this approach is simple and easy to understand, it has some disadvantages. As an - attempt to relief and improve this, the promise-system was introduced. In principle it solves most of the - problems found in the callback-approach; however it has some downsides as well: - - - Convolution of multiple principles - Promises unite the ideas of asynchronous program flow and error handling. - - - Instant execution - Creating a promise results in the instant execution of the given executor prodecure. While this might be - convenient in some cases, it can be quite disturbing and counter-intuitive in others. - - - Broken typing - The Promise system doesn't distinguish between an appending "then" (i.e. passing a function, which returns a - new promise) and a closing "then" (i.e. passing a function, which has no return value). On top of that it - allows returning simple values in an appending "then", which results in an implicit call of the executors - "resolve"-function. The price for these "pragmatic" features is that the whole system can't be typed well. - And even though JavaScript is not a strictly typed language, it was a quite questionable decision to design - the promise system in a way, which breaks typing from the start. - - The deferral-system forseeks to solve these issues while retaining the advantages of the promise-system. - */ - /** - * @author fenris - * @desc activates the deferral and handles its output according to a given procedure - * @param {(value : type_value)=>void} procedure a function which receives the output of the deferral as argument - */ - function deferral_use(deferral, input, procedure) { - deferral.representation(input).then(value => { - procedure(value); - }, reason => { - throw reason; - }); - } - lib_call.deferral_use = deferral_use; - /** - * @author fenris - * @desc creates a deferral-subject (similar to "new Promise", where "convey" reflects "resolve"/"reject") - */ - function deferral_make(handler) { - return ({ - "representation": ((input) => (new Promise((resolve, reject) => { - handler(input, resolve); - }))) - }); - } - lib_call.deferral_make = deferral_make; - /** - * @author fenris - * @desc wraps a simple function into a deferral (similar to "Promise.resolve"/"Promise.reject") - */ - function deferral_wrap(function_) { - return (deferral_make((input, convey) => convey(function_(input)))); - } - lib_call.deferral_wrap = deferral_wrap; - /** - * @author fenris - */ - function deferral_id() { - return (deferral_make((input, convey) => convey(input))); - } - lib_call.deferral_id = deferral_id; - /** - * @author fenris - */ - function deferral_const(value) { - return (deferral_make((input, convey) => convey(value))); - } - lib_call.deferral_const = deferral_const; - /** - * @author fenris - */ - function deferral_delay(output, delay) { - return (deferral_make((input, convey) => { - setTimeout(() => convey(output), delay); - })); - } - lib_call.deferral_delay = deferral_delay; - /** - * @author fenris - * @desc connects two deferrals to form a new one; the output of the first is taken as input for the second - * (similar to "Promise.then" when passing a function which returns a new promise) - * @param {type_deferral} first a simple deferral - * @param {(value1 : type_value1)=>type_deferral} second a function depending from a value returning a deferral - */ - function deferral_compose_serial(first, second) { - return { - "representation": ((input) => first.representation(input).then((between) => second.representation(between))) - }; - } - lib_call.deferral_compose_serial = deferral_compose_serial; - /** - * @author fenris - */ - function deferral_compose_parallel({ "left": deferral_left, "right": deferral_right, }) { - return (deferral_make((input, convey) => { - let object = { - "left": lib_maybe.make_nothing(), - "right": lib_maybe.make_nothing(), - }; - let finish = function () { - if (lib_maybe.is_just(object.left) - && - lib_maybe.is_just(object.right)) { - let result = { - "left": lib_maybe.cull(object.left), - "right": lib_maybe.cull(object.right), - }; - convey(result); - } - else { - // do nothing - } - }; - deferral_use(deferral_left, input, output_left => { - object.left = lib_maybe.make_just(output_left); - finish(); - }); - deferral_use(deferral_right, input, output_right => { - object.right = lib_maybe.make_just(output_right); - finish(); - }); - })); - } - lib_call.deferral_compose_parallel = deferral_compose_parallel; - /** - * @author fenris - * @desc repeatedly applied serial composition - */ - function deferral_chain(members) { - return (members.reduce( - // (result, current) => deferral_compose_serial(result, current), - deferral_compose_serial, deferral_id())); - } - lib_call.deferral_chain = deferral_chain; - /** - * @author fenris - */ - /* - export function deferral_bunch( - members : {[name : string] : type_deferral} - ) : type_deferral { - - } - */ -})(lib_call || (lib_call = {})); -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -var lib_call; -(function (lib_call) { - /** - * @author fenris - */ - class class_deferral { - /** - * @author fenris - */ - constructor(subject) { - this.subject = subject; - } - /** - * @author fenris - */ - static _cram(subject) { - return (new class_deferral(subject)); - } - /** - * @author fenris - */ - static _tear(instance) { - return instance.subject; - } - /** - * @author fenris - */ - static make(handler) { - return (class_deferral._cram(lib_call.deferral_make(handler))); - } - /** - * @author fenris - */ - use(input, procedure) { - return (lib_call.deferral_use(class_deferral._tear(this), input, procedure)); - } - /** - * @author fenris - */ - compose_serial(second) { - return (class_deferral._cram(lib_call.deferral_compose_serial(class_deferral._tear(this), class_deferral._tear(second)))); - } - /** - * @author fenris - */ - static chain(members) { - return (class_deferral._cram(lib_call.deferral_chain(members.map(member => class_deferral._tear(member))))); - } - /** - * @author fenris - */ - static wrap(function_) { - return (class_deferral._cram(lib_call.deferral_wrap(function_))); - } - /** - * @author fenris - */ - static const_(value) { - return (class_deferral._cram(lib_call.deferral_const(value))); - } - /** - * @author fenris - */ - static delay(output, delay) { - return (class_deferral._cram(lib_call.deferral_delay(output, delay))); - } - } - lib_call.class_deferral = class_deferral; -})(lib_call || (lib_call = {})); -/* -This file is part of »bacterio-plankton:call«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:call« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:call« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:call«. If not, see . - */ -var lib_call; -(function (lib_call) { - /** - * @author fenris - */ - function timeout(function_, delay) { - return ( - /*window.*/ setTimeout(function_, delay)); - } - lib_call.timeout = timeout; - /** - * @desc a definition for a value being "defined" - * @author neuc - */ - function is_def(obj, null_is_valid = false) { - return (!((typeof (obj) === "undefined") - || - (!null_is_valid && (obj === null)))); - } - lib_call.is_def = is_def; - /** - * @desc returns the value if set and, when a type is specified, if the type is correct, if not return default_value - * @author neuc - */ - function def_val(value, default_value, type = null, null_is_valid = false) { - if (is_def(value, null_is_valid) - && - (is_def(type) - ? ((typeof value === type) - || - ((value === null) - && - null_is_valid)) - : true)) { - return value; - } - else { - return default_value; - } - } - lib_call.def_val = def_val; - ; - /** - * @desc just the empty function; useful for some callbacks etc. - * @author fenris - */ - function nothing() { - } - lib_call.nothing = nothing; - /** - * @desc outputs - * @author fenris - */ - function output(...args) { - lib_log.info.apply(lib_log, args); - } - lib_call.output = output; - /** - * @desc converts the "arguments"-map into an array - * @param {Object} args - * @author fenris - */ - function args2list(args) { - return Object.keys(args).map(key => args[key]); - } - lib_call.args2list = args2list; - /** - * @desc provides the call for an attribute of a class as a regular function - * @param {string} name the name of the attribute - * @return {*} - * @author fenris - */ - function attribute(name) { - return ((object) => object[name]); - } - lib_call.attribute = attribute; - /** - * @desc provides a method of a class as a regular function - * @param {string} name the name of the method - * @return {function} - * @author fenris - */ - function method(name) { - return (function (object) { return object[name].apply(object, args2list(arguments).slice(1)); }); - } - lib_call.method = method; - /** - * @author fenris - */ - function distinguish(unival, handlers, fallback = null) { - if (unival.kind in handlers) { - let handler = handlers[unival.kind]; - return handler(unival.data); - } - else { - let message = ("unhandled kind '" + unival.kind + "'"); - if (fallback !== null) { - console.warn(message); - return fallback(unival); - } - else { - throw (new Error(message)); - } - } - } - lib_call.distinguish = distinguish; -})(lib_call || (lib_call = {})); diff --git a/lib/plankton/file/licence.txt b/lib/plankton/file/licence.txt deleted file mode 100644 index 3e79226..0000000 --- a/lib/plankton/file/licence.txt +++ /dev/null @@ -1,861 +0,0 @@ -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:file« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:file« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:file«. If not, see . - - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/lib/plankton/file/logic-decl.d.ts b/lib/plankton/file/logic-decl.d.ts deleted file mode 100644 index 2ed25de..0000000 --- a/lib/plankton/file/logic-decl.d.ts +++ /dev/null @@ -1,69 +0,0 @@ -declare module lib_file { - /** - * @author fenris,maspr - * @todo clear up if http(s)-handling belongs here or not ... - */ - function read_promise(path: string): lib_call.type_promise; - /** - * @author fenris - */ - function write_promise(path: string, content: string): lib_call.type_promise; -} -declare module lib_file { - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function read_json_promise(path: string): lib_call.type_promise; - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function write_json_promise(path: string, data: any): lib_call.type_promise; - /** - * @author fenris - * @deprecated use promises instead of executors - */ - function read_executor(path: string): lib_call.type_executor; - /** - * @author fenris - * @deprecated use promises instead of executors - */ - function write_executor(path: string, content: string): lib_call.type_executor; - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - * @deprecated use promises instead of executors - */ - function read_json_executor(path: string): lib_call.type_executor; - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - * @deprecated use promises instead of executors - */ - function write_json_executor(path: string, data: any): lib_call.type_executor; - /** - * @desc reads a file - * @author fenris - * @todo replace with promise version - */ - function read(path: string): lib_call.type_executor; - /** - * @desc writes a file - * @author fenris - * @todo replace with promise version - */ - function write(path: string, content: string): lib_call.type_executor; - /** - * @desc reads a json file - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function read_json(path: string): lib_call.type_executor; - /** - * @desc writes a json file - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function write_json(path: string, data: any): lib_call.type_executor; -} diff --git a/lib/plankton/file/logic-impl.js b/lib/plankton/file/logic-impl.js deleted file mode 100644 index dfe4674..0000000 --- a/lib/plankton/file/logic-impl.js +++ /dev/null @@ -1,261 +0,0 @@ -/* -This file is part of »bacterio-plankton:file«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:file« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:file« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:file«. If not, see . - */ -var lib_file; -(function (lib_file) { - /** - * @author fenris - */ - function read_regular_promise(path) { - const nm_fs = require("fs"); - return (lib_call.promise_make((resolve, reject) => { - nm_fs.readFile(path, { - "encoding": "utf8", - "flag": "r", - }, (error, content) => { - if (error == null) { - resolve(content); - } - else { - reject(error); - } - }); - })); - } - /** - * @author fenris - */ - function read_http_promise(path) { - return (lib_call.promise_make((resolve, reject) => { - const nm_url = require("url"); - const parsed_url = nm_url.parse(path, false, true); - const client = ((parsed_url.protocol === "https:") - ? require("https") - : require("http")); - const default_port = ((parsed_url.protocol == "https:") - ? 443 - : 80); - const options = { - "hostname": parsed_url.hostname, - "port": (parsed_url.port || default_port), - "path": parsed_url.path, - "method": "GET" - }; - let req = client.request(options, (res) => { - let data = ""; // @todo - res.on("data", (chunk) => { - data += chunk; - }); - res.on("end", () => { - resolve(data); - }); - }); - req.end(); - req.on("error", (error) => { - reject(error); - }); - })); - } - /** - * @author fenris - */ - function write_regular_promise(path, content) { - const nm_fs = require("fs"); - return (lib_call.promise_make((resolve, reject) => { - nm_fs.writeFile(path, content, { - "encoding": "utf8", - "flag": "w", - }, (error) => { - if (error == null) { - resolve(undefined); - } - else { - reject(error); - } - }); - })); - } - /** - * @author maspr,fenris - */ - function determine_handler(path) { - if (new RegExp("^https?:\/\/").test(path)) { - return "http"; - } - else { - return "file"; - } - } - /** - * @author fenris,maspr - * @todo clear up if http(s)-handling belongs here or not ... - */ - function read_promise(path) { - switch (determine_handler(path)) { - case "file": { - return read_regular_promise(path); - break; - } - case "http": { - return read_http_promise(path); - break; - } - default: { - const message = "unhandled protocol"; - return lib_call.promise_reject(new Error(message)); - break; - } - } - } - lib_file.read_promise = read_promise; - /** - * @author fenris - */ - function write_promise(path, content) { - return write_regular_promise(path, content); - } - lib_file.write_promise = write_promise; -})(lib_file || (lib_file = {})); -/* -This file is part of »bacterio-plankton:file«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:file« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:file« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:file«. If not, see . - */ -var lib_file; -(function (lib_file) { - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function read_json_promise(path) { - return (lib_call.promise_resolve(undefined) - .then(_ => lib_file.read_promise(path)) - .then(content => lib_call.promise_make((resolve, reject) => { - let error; - let data; - try { - data = JSON.parse(content); - error = null; - } - catch (exception) { - let message = `invalid json '${path}'`; - error = new class_error(message, [exception]); - } - if (error == null) { - resolve(data); - } - else { - reject(error); - } - }))); - } - lib_file.read_json_promise = read_json_promise; - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function write_json_promise(path, data) { - return lib_file.write_promise(path, JSON.stringify(data, undefined, "\t")); - } - lib_file.write_json_promise = write_json_promise; - /** - * @author fenris - * @deprecated use promises instead of executors - */ - function read_executor(path) { - return lib_call.promise_to_executor(lib_file.read_promise(path)); - } - lib_file.read_executor = read_executor; - /** - * @author fenris - * @deprecated use promises instead of executors - */ - function write_executor(path, content) { - return lib_call.promise_to_executor(lib_file.write_promise(path, content)); - } - lib_file.write_executor = write_executor; - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - * @deprecated use promises instead of executors - */ - function read_json_executor(path) { - return lib_call.promise_to_executor(read_json_promise(path)); - } - lib_file.read_json_executor = read_json_executor; - /** - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - * @deprecated use promises instead of executors - */ - function write_json_executor(path, data) { - return lib_call.promise_to_executor(write_json_promise(path, data)); - } - lib_file.write_json_executor = write_json_executor; - /** - * @desc reads a file - * @author fenris - * @todo replace with promise version - */ - function read(path) { - return read_executor(path); - } - lib_file.read = read; - /** - * @desc writes a file - * @author fenris - * @todo replace with promise version - */ - function write(path, content) { - return write_executor(path, content); - } - lib_file.write = write; - /** - * @desc reads a json file - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function read_json(path) { - return read_json_executor(path); - } - lib_file.read_json = read_json; - /** - * @desc writes a json file - * @author fenris - * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead - */ - function write_json(path, data) { - return write_json_executor(path, data); - } - lib_file.write_json = write_json; -})(lib_file || (lib_file = {})); diff --git a/lib/plankton/lang/licence.txt b/lib/plankton/lang/licence.txt deleted file mode 100644 index 3b8218a..0000000 --- a/lib/plankton/lang/licence.txt +++ /dev/null @@ -1,861 +0,0 @@ -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/lib/plankton/lang/logic-decl.d.ts b/lib/plankton/lang/logic-decl.d.ts deleted file mode 100644 index c9b6246..0000000 --- a/lib/plankton/lang/logic-decl.d.ts +++ /dev/null @@ -1,590 +0,0 @@ -declare module lib_log { - /** - * @author fenris - */ - type int = number; - function level_push(level: int): void; - function level_pop(): void; - function indent_push(indent: int): void; - function indent_pop(): void; - function indent_inc(): void; - function indent_dec(): void; - /** - * @author fenris - */ - function write({ "message": message, "type": type, "prefix": prefix, "level": level, "indent": indent, }: { - message?: string; - type?: string; - prefix?: string; - level?: int; - indent?: int; - }): void; -} -declare module lib_lang { - /** - * @author fenris - */ - type char = string; - /** - * @author fenris - */ - type type_terminal_default = { - id: string; - data?: Object; - }; - /** - * @author fenris - */ - function find(word: Array, part: Array, equality: (x: type_x, y: type_y) => boolean, /*= instance_collate*/ right_to_left?: boolean): int; -} -declare module lib_lang { - /** - * @author fenris - */ - interface interface_symbol { - /** - * @author fenris - */ - equals(symbol: interface_symbol): boolean; - /** - * @author fenris - */ - toString(): string; - } -} -declare module lib_lang { - /** - * @author fenris - */ - class class_symbol_terminal implements interface_symbol { - /** - * @author fenris - */ - protected terminal: type_terminal; - /** - * @author fenris - */ - protected equality_terminal: (x: type_terminal, y: type_terminal) => boolean; - /** - * @desc [constructor] - * @author fenris - */ - constructor(terminal: type_terminal, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean); - /** - * @author fenris - */ - terminal_get(): type_terminal; - /** - * @override - * @author fenris - */ - equals(symbol: interface_symbol): boolean; - /** - * @override - * @author fenris - */ - toString(): string; - /** - * @author fenris - */ - static tree_generic(terminal: type_terminal): class_symbol_terminal>; - /** - * @author fenris - */ - static tree_default(terminal: type_terminal_default): class_symbol_terminal>; - } -} -declare module lib_lang { - /** - * @author fenris - */ - class class_symbol_variable implements interface_symbol { - /** - * @author fenris - */ - protected variable: type_variable; - /** - * @author fenris - */ - protected meaning: type_meaning; - /** - * @desc [constructor] - * @author fenris - */ - constructor(variable: type_variable, meaning?: type_meaning); - /** - * @desc [accessor] [getter] - * @author fenris - */ - variable_get(): type_variable; - /** - * @desc [accessor] [getter] - * @author fenris - */ - meaning_get(): type_meaning; - /** - * @override - * @author fenris - */ - equals(symbol: interface_symbol): boolean; - /** - * @override - * @author fenris - */ - toString(): string; - /** - * @author fenris - */ - static tree_generic(variable: type_variable): class_symbol_variable>; - /** - * @author fenris - */ - static tree_default(variable: string): class_symbol_variable>; - } -} -declare module lib_lang { - /** - * @author fenris - */ - interface interface_lexer { - /** - * @author fenris - */ - run(input: Array): Array; - } -} -declare module lib_lang { - /** - * @author fenris - */ - type type_token = { - sequence: Array; - terminal: class_maybe; - }; - /** - * @author fenris - */ - type type_lexerrule = { - search: (part: Array) => { - found: boolean; - data?: { - position?: int; - length?: int; - }; - }; - construct: (part: Array) => Array; - observer: lib_observer.type_observer; - }; - /** - * @author fenris - */ - function lexerrule_make(search: (part: Array) => { - found: boolean; - data?: { - position?: int; - length?: int; - }; - }, construct: (part: Array) => Array): type_lexerrule; - /** - * @author fenris - * @todo schön machen? is aber vermutlich gar nicht möglich :/ - */ - function lexerrule_show(rule: type_lexerrule): string; - /** - * @author fenris - */ - function lexerrule_apply(rule: type_lexerrule, tokens: Array>): Array>; - /** - * @author fenris - */ - function lexerrule_pass(): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_generic(rule_raw: { - pattern: string; - construct: (part: Array) => Array; - }): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_ignore(pattern: string): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_void(pattern: string, id: string): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_boolean(pattern: string, id: string, value: boolean): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_int(pattern: string, id: string): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_float(pattern: string, id: string): type_lexerrule; - /** - * @author fenris - */ - function lexerrule_pattern_string(pattern: string, id: string): type_lexerrule; -} -declare module lib_lang { - /** - * @author fenris - * @todo warn on prefix-detection - * @todo after rule application don't start from the beginning but from the last position - */ - type type_lexer_dumb = { - rules: Array>; - observer: lib_observer.type_observer; - }; - /** - * @author fenris - */ - function lexer_dumb_make(rules: Array>): type_lexer_dumb; - /** - * @author fenris - */ - function lexer_dumb_run(subject: type_lexer_dumb, input: Array, configuration?: { - use_reduce?: boolean; - }): Array; - /** - * @author fenris - */ - function lexer_dumb_pass(): type_lexer_dumb; -} -declare module lib_lang { - /** - * @author fenris - */ - class class_lexerrule { - /** - * @author fenris - */ - protected subject: type_lexerrule; - /** - * @author fenris - */ - constructor(subject: type_lexerrule); - /** - * @author fenris - */ - static construct({ "search": search, "construct": construct, }: { - search: (part: Array) => { - found: boolean; - data?: { - position?: int; - length?: int; - }; - }; - construct: (part: Array) => Array; - }): class_lexerrule; - /** - * @author fenris - */ - subject_get(): type_lexerrule; - /** - * @author fenris - */ - search(part: Array): { - found: boolean; - data?: { - position?: int; - length?: int; - }; - }; - /** - * @author fenris - */ - construct(part: Array): Array; - /** - * @author fenris - */ - static pass(): class_lexerrule; - /** - * @author fenris - */ - static pattern_generic(rule_raw: { - pattern: string; - construct: (part: Array) => Array; - }): class_lexerrule; - /** - * @author fenris - */ - static pattern_ignore(pattern: string): class_lexerrule; - /** - * @author fenris - */ - static pattern_void(pattern: string, id: string): class_lexerrule; - /** - * @author fenris - */ - static pattern_boolean(pattern: string, id: string, value: boolean): class_lexerrule; - /** - * @author fenris - */ - static pattern_int(pattern: string, id: string): class_lexerrule; - /** - * @author fenris - */ - static pattern_float(pattern: string, id: string): class_lexerrule; - /** - * @author fenris - */ - static pattern_string(pattern: string, id: string): class_lexerrule; - } - /** - * @author fenris - */ - class class_lexer_dumb implements interface_lexer { - /** - * @author fenris - */ - protected subject: type_lexer_dumb; - /** - * @author fenris - */ - constructor(subject: type_lexer_dumb); - /** - * @author fenris - */ - static construct(rules: Array>): class_lexer_dumb; - /** - * @author fenris - */ - run(input: Array): Array; - /** - * @author fenris - */ - static pass(): class_lexer_dumb; - } -} -declare module lib_lang { - /** - * @author fenris - */ - interface interface_parser { - /** - * @author fenris - */ - run(input: Array): type_meaning; - } -} -declare module lib_lang { - /** - * @author fenris - */ - type type_tree = { - label?: string; - value: Array; - children: Array>; - }; - /** - * @author fenris - */ - type type_parserrule = { - premise: type_variable; - conclusion: Array>; - construct: (args: Array, terminals: Array) => type_meaning; - right_to_left: boolean; - }; - /** - * @desc [constructor] - * @author fenris - */ - function parserrule_make({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left, }: { - premise: type_variable; - conclusion: Array>; - construct: (args: Array, terminals: Array) => type_meaning; - right_to_left?: boolean; - }): { - "premise": type_variable; - "conclusion": interface_symbol[]; - "construct": (args: type_meaning[], terminals: type_terminal[]) => type_meaning; - "right_to_left": boolean; - }; - /** - * @author fenris - */ - function parserrule_check(parserrule: type_parserrule, sequence: Array>): int; - /** - * @author fenris - */ - function parserrule_construct(parserrule: type_parserrule, args: Array, terminals: Array): type_meaning; -} -declare module lib_lang { - /** - * @author fenris - * @todo fatal error on empty conclusion - */ - type type_parser_dumb = { - start: type_variable; - rules: Array>; - equality_terminal: (x: type_terminal, y: type_terminal) => boolean; - observer: lib_observer.type_observer; - }; - /** - * @author fenris - */ - function parser_dumb_make(start: type_variable, rules: Array>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): { - "start": type_variable; - "rules": type_parserrule[]; - "equality_terminal": (x: type_terminal, y: type_terminal) => boolean; - "observer": lib_observer.type_observer; - }; - /** - * @override - * @author fenris - */ - function parser_dumb_run(parser_dumb: type_parser_dumb, input: Array): type_meaning; - /** - * @author fenris - */ - function parser_dumb_tree(start: type_variable, rules_raw: Array<{ - premise: type_variable; - conclusion: Array>>; - label?: string; - right_to_left?: boolean; - }>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): type_parser_dumb>; -} -declare module lib_lang { - /** - * @author fenris - */ - class class_parserrule { - /** - * @author fenris - */ - protected subject: type_parserrule; - /** - * @desc [constructor] - * @author fenris - */ - private constructor(); - /** - * @desc [constructor] - * @author fenris - */ - static construct({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left, }: { - premise: type_variable; - conclusion: Array>; - construct: (args: Array, terminals: Array) => type_meaning; - right_to_left?: boolean; - }): class_parserrule; - /** - * @desc [accessor] [getter] - * @author fenris - */ - subject_get(): type_parserrule; - /** - * @desc [accessor] [getter] - * @author fenris - */ - premise_get(): type_variable; - /** - * @desc [accessor] [getter] - * @author fenris - */ - conclusion_get(): Array>; - /** - * @desc [accessor] - * @author fenris - */ - check(sequence: Array>): int; - /** - * @desc [accessor] - * @author fenris - */ - construct(args: Array, terminals: Array): type_meaning; - } - /** - * @author fenris - * @todo fatal error on empty conclusion - */ - class class_parser_dumb implements interface_parser { - /** - * @author fenris - */ - protected subject: type_parser_dumb; - /** - * @author fenris - */ - private constructor(); - /** - * @author fenris - */ - static construct(start: type_variable, rules: Array>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): class_parser_dumb; - /** - * @override - * @author fenris - */ - run(input: Array): type_meaning; - /** - * @author fenris - */ - static tree(start: type_variable, rules_raw: Array<{ - premise: type_variable; - conclusion: Array>>; - label?: string; - right_to_left?: boolean; - }>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): class_parser_dumb>; - } -} -declare module lib_lang { - /** - * @author fenris - */ - class class_reader { - /** - * @author fenris - */ - protected lexer: interface_lexer; - /** - * @author fenris - */ - protected parser: interface_parser; - /** - * @author fenris - */ - constructor(lexer: interface_lexer, parser: interface_parser); - /** - * @desc [accessor] yes, it's really just lexing and parsing - * @author fenris - */ - run(input: Array): type_result; - /** - * @author fenris - */ - static default({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }: { - lexer_rules: Array>; - parser_start: string; - parser_rules: Array<{ - premise: string; - conclusion: Array>>; - label?: string; - right_to_left?: boolean; - }>; - }): class_reader>; - /** - * @author fenris - */ - static default_raw({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }: { - lexer_rules: Array<{ - type: string; - parameters?: Object; - }>; - parser_start: string; - parser_rules: Array<{ - premise: string; - conclusion: Array<{ - type: string; - parameters?: Object; - }>; - label?: string; - right_to_left?: boolean; - }>; - }): class_reader>; - } -} diff --git a/lib/plankton/lang/logic-impl.js b/lib/plankton/lang/logic-impl.js deleted file mode 100644 index 55aa010..0000000 --- a/lib/plankton/lang/logic-impl.js +++ /dev/null @@ -1,1347 +0,0 @@ -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_log; -(function (lib_log) { - /** - * @author fenris - */ - /*export*/ var level_stack = [0]; - function level_push(level) { level_stack.push(level); } - lib_log.level_push = level_push; - function level_pop() { if (level_stack.length > 1) { - level_stack.pop(); - } } - lib_log.level_pop = level_pop; - function level_get() { return level_stack.slice(-1)[0]; } - /* - export function level_inc() : void {level_push(level_get()+1);} - export function level_dec() : void {level_push(level_get()-1);} - */ - /** - * @author fenris - */ - var indent_stack = [0]; - function indent_push(indent) { indent_stack.push(indent); } - lib_log.indent_push = indent_push; - function indent_pop() { if (indent_stack.length > 1) { - indent_stack.pop(); - } } - lib_log.indent_pop = indent_pop; - function indent_get() { return level_stack.slice(-1)[0]; } - function indent_inc() { level_push(level_get() + 1); } - lib_log.indent_inc = indent_inc; - function indent_dec() { level_push(level_get() - 1); } - lib_log.indent_dec = indent_dec; - /** - * @author fenris - */ - function write({ "message": message, "type": type = null, "prefix": prefix = null, "level": level = 0, "indent": indent = 0, }) { - if (level <= level_get()) { - let message_ = ""; - // body - { - message_ = `${message}`; - } - // type - { - if (type != null) { - message_ = `[${type}] ${message_}`; - } - } - // prefix - { - if (prefix != null) { - message_ = `<${prefix}> ${message_}`; - } - } - // indent - { - for (let index = 0; index < indent; ++index) { - message_ = `\t${message_}`; - } - } - console.info(message_); - } - } - lib_log.write = write; -})(lib_log || (lib_log = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - function sequence(length) { - return ((length > 0) ? sequence(length - 1).concat([length - 1]) : []); - } - /** - * @author fenris - */ - function find(word, part, equality, /*= instance_collate*/ right_to_left = false) { - let result = -1; - let found = sequence(word.length - part.length + 1).some(function (position) { - let position_ = (right_to_left - ? (word.length - part.length - position) - : (position)); - let matches = sequence(part.length).every(index => equality(word[position_ + index], part[index])); - if (matches) { - result = position_; - return true; - } - else { - return false; - } - }); - return result; - } - lib_lang.find = find; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - class class_symbol_terminal { - /** - * @desc [constructor] - * @author fenris - */ - constructor(terminal, equality_terminal = ((x, y) => (x == y))) { - this.terminal = terminal; - this.equality_terminal = equality_terminal; - } - /** - * @author fenris - */ - terminal_get() { - return this.terminal; - } - /** - * @override - * @author fenris - */ - equals(symbol) { - if (symbol instanceof class_symbol_terminal) { - let symbol_terminal = (symbol); - return this.equality_terminal(this.terminal, symbol_terminal.terminal); - } - else { - return false; - } - } - /** - * @override - * @author fenris - */ - toString() { - return JSON.stringify(this); - } - /** - * @author fenris - */ - static tree_generic(terminal) { - return (new lib_lang.class_symbol_terminal(terminal)); - } - /** - * @author fenris - */ - static tree_default(terminal) { - return (new lib_lang.class_symbol_terminal(terminal)); - } - } - lib_lang.class_symbol_terminal = class_symbol_terminal; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - class class_symbol_variable { - /** - * @desc [constructor] - * @author fenris - */ - constructor(variable, meaning = undefined) { - this.variable = variable; - this.meaning = meaning; - } - /** - * @desc [accessor] [getter] - * @author fenris - */ - variable_get() { - return this.variable; - } - /** - * @desc [accessor] [getter] - * @author fenris - */ - meaning_get() { - return this.meaning; - } - /** - * @override - * @author fenris - */ - equals(symbol) { - if (symbol instanceof class_symbol_variable) { - let symbol_variable = (symbol); - return (this.variable == symbol_variable.variable); - } - else { - return false; - } - } - /** - * @override - * @author fenris - */ - toString() { - return JSON.stringify(this); - } - /** - * @author fenris - */ - static tree_generic(variable) { - return (new lib_lang.class_symbol_variable(variable)); - } - /** - * @author fenris - */ - static tree_default(variable) { - return (new lib_lang.class_symbol_variable(variable)); - } - } - lib_lang.class_symbol_variable = class_symbol_variable; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - function lexerrule_make(search, construct) { - let observer = lib_observer.make(); - lib_observer.register(observer, "start"); - lib_observer.register(observer, "message_sequence"); - lib_observer.register(observer, "maximum_reached"); - lib_observer.attend(observer, "start", ({ "rule": rule }) => { - lib_log.write({ - "message": "current rule " + lexerrule_show(rule), - "type": "info", - "prefix": "lib_lang:lexer:run", - "level": 3, - "indent": 1, - }); - }); - lib_observer.attend(observer, "message_sequence", ({ "tokens": tokens }) => { - lib_log.write({ - "message": "current sequence", - "type": "info", - "prefix": "lib_lang:lexer:run", - "level": 4, - "indent": 2, - }); - tokens.forEach((token) => { - lib_log.write({ - "message": JSON.stringify(token), - "level": 4, - "indent": 3, - }); - }); - }); - lib_observer.attend(observer, "maximum_reached", () => { - lib_log.write({ - "message": "maximum reached", - "type": "warn", - "prefix": "lib_lang:lexer:run", - "level": 1, - "indent": 2, - }); - }); - return { - "search": search, - "construct": construct, - "observer": observer, - }; - } - lib_lang.lexerrule_make = lexerrule_make; - /** - * @author fenris - * @todo schön machen? is aber vermutlich gar nicht möglich :/ - */ - function lexerrule_show(rule) { - return "(nicht darstellbar)"; - } - lib_lang.lexerrule_show = lexerrule_show; - /** - * @author fenris - */ - function lexerrule_apply(rule, tokens) { - let maximum = (1 << 5); - lib_observer.notify(rule.observer, "start", { "rule": rule }); - let offset = 0; - // process _all_ occurences - while (true) { - lib_observer.notify(rule.observer, "message_sequence", { "tokens": tokens }); - if (maximum-- <= 0) { - lib_observer.notify(rule.observer, "maximum_reached", {}); - break; - } - let found = tokens.slice(offset).some(function (token_old, index) { - if (token_old.terminal.is_just()) { - return false; - } - else { - let result = rule.search(token_old.sequence); - if (!result.found) { - return false; - } - else { - // der Ersatz für den Platz von "token_old" - let tokens_new = []; - // die Zeichen des alten Tokens, die vor der Übereinstimmung stehen - { - let nonempty = (result.data.position > 0); - if (nonempty) { - let sequence = token_old.sequence.slice(0, result.data.position); - tokens_new.push({ - "sequence": sequence, - "terminal": new class_nothing(), - }); - } - } - // die Zeichen der Übereinstimmung - { - let sequence = token_old.sequence.slice(result.data.position, result.data.position + result.data.length); - let terminals = rule.construct(sequence); - terminals.forEach((terminal) => { - tokens_new.push({ - "sequence": null, - "terminal": new class_just(terminal), - }); - }); - } - // die Zeichen des alten Tokens, die hinter der Übereinstimmung stehen - { - let nonempty = (result.data.position + result.data.length < token_old.sequence.length); - if (nonempty) { - let sequence = token_old.sequence.slice(result.data.position + result.data.length /*, - token_old.sequence.length*/); - tokens_new.push({ - "sequence": sequence, - "terminal": new class_nothing(), - }); - } - } - /* - console.log("-- offset_old: ", offset); - console.log("-- index: ", index); - console.log("-- token_old: ", token_old); - offset += index; - console.log("-- offset_new: ", offset); - */ - tokens = [] - .concat(tokens.slice(0, index)) - .concat(tokens_new) - .concat(tokens.slice(index + 1)); - return true; - } - } - }); - if (!found) { - break; - } - } - return tokens; - } - lib_lang.lexerrule_apply = lexerrule_apply; - /** - * @author fenris - */ - function lexerrule_pass() { - return lexerrule_make((part) => ({ "found": true, "data": { "position": 0, "length": 1 } }), (part) => part); - } - lib_lang.lexerrule_pass = lexerrule_pass; - /** - * @author fenris - */ - function lexerrule_pattern_generic(rule_raw) { - let regexp = new RegExp(rule_raw.pattern); - return lexerrule_make((part) => { - const part_ = part.join(""); - // console.log(`searching for '${regexp.toString()}' in '${part_}' ...`); - const match_ = regexp.exec(part_); - // console.log(`... result: `, match_); - if (match_ == null) { - return { "found": false }; - } - else { - return { "found": true, "data": { "position": match_.index, "length": match_[0].length } }; - } - }, rule_raw.construct); - } - lib_lang.lexerrule_pattern_generic = lexerrule_pattern_generic; - /** - * @author fenris - */ - function lexerrule_pattern_ignore(pattern) { - return (lexerrule_pattern_generic({ - "pattern": pattern, - "construct": tokens => [] - })); - } - lib_lang.lexerrule_pattern_ignore = lexerrule_pattern_ignore; - /** - * @author fenris - */ - function lexerrule_pattern_void(pattern, id) { - return (lexerrule_pattern_generic({ - "pattern": pattern, - "construct": tokens => [{ "id": id, "data": {} }], - })); - } - lib_lang.lexerrule_pattern_void = lexerrule_pattern_void; - /** - * @author fenris - */ - function lexerrule_pattern_boolean(pattern, id, value) { - return (lexerrule_pattern_generic({ - "pattern": pattern, - "construct": tokens => [{ "id": id, "data": { "value": value } }], - })); - } - lib_lang.lexerrule_pattern_boolean = lexerrule_pattern_boolean; - /** - * @author fenris - */ - function lexerrule_pattern_int(pattern, id) { - return (lexerrule_pattern_generic({ - "pattern": pattern, - "construct": tokens => [{ "id": id, "data": { "value": parseInt(tokens.join("")) } }], - })); - } - lib_lang.lexerrule_pattern_int = lexerrule_pattern_int; - /** - * @author fenris - */ - function lexerrule_pattern_float(pattern, id) { - return (lexerrule_pattern_generic({ - "pattern": pattern, - "construct": tokens => [{ "id": id, "data": { "value": parseFloat(tokens.join("")) } }], - })); - } - lib_lang.lexerrule_pattern_float = lexerrule_pattern_float; - /** - * @author fenris - */ - function lexerrule_pattern_string(pattern, id) { - return (lexerrule_pattern_generic({ - "pattern": pattern, - "construct": tokens => [{ "id": id, "data": { "value": tokens.join("") } }], - })); - } - lib_lang.lexerrule_pattern_string = lexerrule_pattern_string; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /* - -- input - [("0 & !0",—)] - -- ws - [("0",—),("& !0",—)] - [("0",—),("&",—),("!0",—)] - -- const - [("0",),("&",—),("!0",—)] - [("0",),("&",—),("!",—),("0",)] - -- not - [("0",),("&",—),("!",),("0",)] - -- and - [("0",),("&",),("!",),("0",)] - */ - /** - * @author fenris - */ - function lexer_dumb_make(rules) { - let observer = lib_observer.make(); - lib_observer.register(observer, "start"); - lib_observer.register(observer, "fail"); - lib_observer.attend(observer, "start", ({ "input": input }) => { - lib_log.write({ - "message": ("running lexer for input »" + JSON.stringify(input) + "«"), - "type": "log", - "prefix": "lib_lang:lexer:run", - "level": 2, - "indent": 0, - }); - }); - lib_observer.attend(observer, "fail", ({ "open": open }) => { - lib_log.write({ - "message": "the input could not be lexxed correctly", - "type": "warn", - "prefix": "lib_lang:lexer:run", - "level": 0, - "indent": 0, - }); - lib_log.write({ - "message": "the following sequences could not be identified", - "type": "info", - "prefix": "lib_lang:lexer:run", - "level": 1, - "indent": 0, - }); - open.forEach((token) => { - lib_log.write({ - "message": String(token.sequence), - "level": 1, - "indent": 1, - }); - }); - }); - return { - "rules": rules, - "observer": observer, - }; - } - lib_lang.lexer_dumb_make = lexer_dumb_make; - /** - * @author fenris - */ - function lexer_dumb_run(subject, input, configuration = { - "use_reduce": false, - }) { - lib_observer.notify(subject.observer, "start", { "input": input }); - let tokens; - if (configuration.use_reduce) { - tokens = subject.rules.reduce((tokens, rule) => lib_lang.lexerrule_apply(rule, tokens), [ - { - "sequence": input, - "terminal": new class_nothing(), - } - ]); - } - else { - tokens = [ - { - "sequence": input, - "terminal": new class_nothing(), - } - ]; - subject.rules.forEach((rule) => (tokens = lib_lang.lexerrule_apply(rule, tokens))); - } - let open = tokens.filter(token => token.terminal.is_nothing()); - if (open.length > 0) { - lib_observer.notify(subject.observer, "fail", { "open": open }); - throw (new Error("failed")); - } - else { - return tokens.map(token => token.terminal.cull()); - } - } - lib_lang.lexer_dumb_run = lexer_dumb_run; - /** - * @author fenris - */ - function lexer_dumb_pass() { - return lexer_dumb_make([ - lib_lang.lexerrule_pass(), - ]); - } - lib_lang.lexer_dumb_pass = lexer_dumb_pass; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - class class_lexerrule { - /** - * @author fenris - */ - constructor(subject) { - this.subject = subject; - } - /** - * @author fenris - */ - static construct({ "search": search, "construct": construct, }) { - let subject = lib_lang.lexerrule_make(search, construct); - return (new class_lexerrule(subject)); - } - /** - * @author fenris - */ - subject_get() { - return this.subject; - } - /** - * @author fenris - */ - search(part) { - return this.subject.search(part); - } - /** - * @author fenris - */ - construct(part) { - return this.subject.construct(part); - } - /** - * @author fenris - */ - static pass() { - return (new class_lexerrule(lib_lang.lexerrule_pass())); - } - /** - * @author fenris - */ - static pattern_generic(rule_raw) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_generic(rule_raw))); - } - /** - * @author fenris - */ - static pattern_ignore(pattern) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_ignore(pattern))); - } - /** - * @author fenris - */ - static pattern_void(pattern, id) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_void(pattern, id))); - } - /** - * @author fenris - */ - static pattern_boolean(pattern, id, value) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_boolean(pattern, id, value))); - } - /** - * @author fenris - */ - static pattern_int(pattern, id) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_int(pattern, id))); - } - /** - * @author fenris - */ - static pattern_float(pattern, id) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_float(pattern, id))); - } - /** - * @author fenris - */ - static pattern_string(pattern, id) { - return (new class_lexerrule(lib_lang.lexerrule_pattern_string(pattern, id))); - } - } - lib_lang.class_lexerrule = class_lexerrule; - /** - * @author fenris - */ - class class_lexer_dumb { - /** - * @author fenris - */ - constructor(subject) { - this.subject = subject; - } - /** - * @author fenris - */ - static construct(rules) { - const subject = lib_lang.lexer_dumb_make(rules.map(rule => rule.subject_get())); - return (new class_lexer_dumb(subject)); - } - /** - * @author fenris - */ - run(input) { - return lib_lang.lexer_dumb_run(this.subject, input); - } - /** - * @author fenris - */ - static pass() { - return (new class_lexer_dumb(lib_lang.lexer_dumb_pass())); - } - } - lib_lang.class_lexer_dumb = class_lexer_dumb; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @desc [constructor] - * @author fenris - */ - function parserrule_make({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left = false, }) { - return { - "premise": premise, - "conclusion": conclusion, - "construct": construct, - "right_to_left": right_to_left, - }; - } - lib_lang.parserrule_make = parserrule_make; - /** - * @author fenris - */ - function parserrule_check(parserrule, sequence) { - let position = lib_lang.find(sequence, parserrule.conclusion, (x, y) => x.equals(y), parserrule.right_to_left); - return position; - } - lib_lang.parserrule_check = parserrule_check; - /** - * @author fenris - */ - function parserrule_construct(parserrule, args, terminals) { - return parserrule.construct(args, terminals); - } - lib_lang.parserrule_construct = parserrule_construct; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - function parser_dumb_make(start, rules, equality_terminal = ((x, y) => (x == y))) { - let observer = lib_observer.make(); - lib_observer.register(observer, "start"); - lib_observer.register(observer, "message_sequence"); - lib_observer.register(observer, "use_rule"); - lib_observer.register(observer, "fail"); - lib_observer.attend(observer, "start", ({ "input": input }) => { - lib_log.write({ - "message": ("running parser for input »" + JSON.stringify(input) + "«"), - "type": "log", - "prefix": "lib_lang:parser:run", - "level": 2, - "indent": 0, - }); - }); - lib_observer.attend(observer, "message_sequence", ({ "sequence": sequence }) => { - lib_log.write({ - "message": "current sequence", - "type": "info", - "prefix": "lib_lang:parser:run", - "level": 3, - "indent": 1, - }); - sequence.forEach((entry) => { - lib_log.write({ - "message": JSON.stringify(entry), - "level": 3, - "indent": 2, - }); - }); - }); - lib_observer.attend(observer, "use_rule", ({ "rule": rule, "conclusion": conclusion }) => { - lib_log.write({ - "message": "using the following rule:", - "type": "log", - "prefix": "lib_lang:parser:run", - "level": 3, - "indent": 2, - }); - lib_log.write({ - "message": "conclusion:", - "level": 3, - "indent": 3, - }); - conclusion.forEach((symbol) => { - lib_log.write({ - "message": symbol.toString(), - "level": 3, - "indent": 4, - }); - }); - lib_log.write({ - "message": "premise:", - "level": 3, - "indent": 3, - }); - lib_log.write({ - "message": rule.premise.toString(), - "level": 3, - "indent": 4, - }); - }); - lib_observer.attend(observer, "fail", ({ "sequence": sequence }) => { - lib_log.write({ - "message": "parsing failed", - "type": "warn", - "prefix": "lib_lang:parser:run", - "level": 0, - "indent": 0, - }); - lib_log.write({ - "message": "last sequence was:", - "type": "info", - "prefix": "lib_lang:parser:run", - "level": 1, - "indent": 0, - }); - sequence.forEach((entry) => { - lib_log.write({ - "message": JSON.stringify(entry), - "level": 1, - "indent": 1, - }); - }); - }); - return { - "start": start, - "rules": rules, - "equality_terminal": equality_terminal, - "observer": observer, - }; - } - lib_lang.parser_dumb_make = parser_dumb_make; - /** - * @override - * @author fenris - */ - function parser_dumb_run(parser_dumb, input) { - lib_observer.notify(parser_dumb.observer, "start", { "input": input }); - let maximum = (1 << 10); - let current = input - .map((terminal) => { - return (new lib_lang.class_symbol_terminal(terminal, parser_dumb.equality_terminal)); - }); - while (true) { - lib_observer.notify(parser_dumb.observer, "message_sequence", { "sequence": current }); - if (maximum-- <= 0) { - break; - } - const found = parser_dumb.rules.some(function (rule, index) { - let conclusion = rule.conclusion; - let position = lib_lang.parserrule_check(rule, current); - if (position >= 0) { - lib_observer.notify(parser_dumb.observer, "use_rule", { "rule": rule, "conclusion": conclusion }); - let terminals = current - .slice(position, position + conclusion.length) - .filter(x => (x instanceof lib_lang.class_symbol_terminal /**/)) - .map(element => (element).terminal_get()); - let args = current - .slice(position, position + conclusion.length) - .filter(x => (x instanceof lib_lang.class_symbol_variable /**/)) - .map(element => (element).meaning_get()); - let meaning = rule.construct(args, terminals); - let symbol = (new lib_lang.class_symbol_variable(rule.premise, meaning)); - current = [] - .concat(current.slice(0, position)) - .concat([symbol]) - .concat(current.slice(position + conclusion.length)); - return true; - } - else { - return false; - } - }); - if (!found) { - break; - } - } - if ((current.length == 1) - && - (current[0] instanceof lib_lang.class_symbol_variable /**/) - && - ((current[0]).variable_get() == parser_dumb.start)) { - return (current[0]).meaning_get(); - } - else { - lib_observer.notify(parser_dumb.observer, "fail", { "sequence": current }); - /* - console.warn("--", "parsing failed"); - console.info("--", "last sequence was:"); current.forEach(element => console.info(element)); - */ - // return null; - throw (new Error("parsing failed")); - } - } - lib_lang.parser_dumb_run = parser_dumb_run; - /** - * @author fenris - */ - function parser_dumb_tree(start, rules_raw, equality_terminal = ((x, y) => (x == y))) { - return (parser_dumb_make(start, rules_raw.map((rule_raw) => { - return (lib_lang.parserrule_make({ - "premise": rule_raw.premise, - "conclusion": rule_raw.conclusion, - "construct": (args, tokens) => { - return { - "label": rule_raw.label, - "value": tokens, - "children": args, - }; - }, - "right_to_left": rule_raw.right_to_left, - })); - }), equality_terminal)); - } - lib_lang.parser_dumb_tree = parser_dumb_tree; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - class class_parserrule { - /** - * @desc [constructor] - * @author fenris - */ - constructor(subject) { - this.subject = subject; - } - /** - * @desc [constructor] - * @author fenris - */ - static construct({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left = false, }) { - return (new class_parserrule({ - "premise": premise, - "conclusion": conclusion, - "construct": construct, - "right_to_left": right_to_left, - })); - } - /** - * @desc [accessor] [getter] - * @author fenris - */ - subject_get() { - return this.subject; - } - /** - * @desc [accessor] [getter] - * @author fenris - */ - premise_get() { - return this.subject.premise; - } - /** - * @desc [accessor] [getter] - * @author fenris - */ - conclusion_get() { - return this.subject.conclusion; - } - /** - * @desc [accessor] - * @author fenris - */ - check(sequence) { - return (lib_lang.parserrule_check(this.subject, sequence)); - } - /** - * @desc [accessor] - * @author fenris - */ - construct(args, terminals) { - return (lib_lang.parserrule_construct(this.subject, args, terminals)); - } - } - lib_lang.class_parserrule = class_parserrule; - /** - * @author fenris - * @todo fatal error on empty conclusion - */ - class class_parser_dumb { - /** - * @author fenris - */ - constructor(subject) { - this.subject = subject; - } - /** - * @author fenris - */ - static construct(start, rules, equality_terminal = ((x, y) => (x == y))) { - const subject = lib_lang.parser_dumb_make(start, rules.map(rule => rule.subject_get()), equality_terminal); - return (new class_parser_dumb(subject)); - } - /** - * @override - * @author fenris - */ - run(input) { - return lib_lang.parser_dumb_run(this.subject, input); - } - /** - * @author fenris - */ - static tree(start, rules_raw, equality_terminal = ((x, y) => (x == y))) { - return (new class_parser_dumb(lib_lang.parser_dumb_tree(start, rules_raw, equality_terminal))); - } - } - lib_lang.class_parser_dumb = class_parser_dumb; -})(lib_lang || (lib_lang = {})); -/* -This file is part of »bacterio-plankton:lang«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:lang« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:lang« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:lang«. If not, see . - */ -var lib_lang; -(function (lib_lang) { - /** - * @author fenris - */ - class class_reader { - /** - * @author fenris - */ - constructor(lexer, parser) { - this.lexer = lexer; - this.parser = parser; - } - /** - * @desc [accessor] yes, it's really just lexing and parsing - * @author fenris - */ - run(input) { - let syntax = this.lexer.run(input); - lib_log.write({ - "message": "syntax: " + JSON.stringify(syntax), - "type": "info", - "prefix": "lib_lang:reader:run", - "level": 3, - }); - let semantics = this.parser.run(syntax); - lib_log.write({ - "message": "semantics: " + JSON.stringify(semantics), - "type": "info", - "prefix": "lib_lang:reader:run", - "level": 3, - }); - return semantics; - } - /** - * @author fenris - */ - static default({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }) { - return (new lib_lang.class_reader(lib_lang.class_lexer_dumb.construct(lexer_rules), lib_lang.class_parser_dumb.tree(parser_start, parser_rules, (x, y) => (x.id == y.id)))); - } - /** - * @author fenris - */ - static default_raw({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }) { - return (this.default({ - "lexer_rules": lexer_rules.map(lexerrule_raw => { - switch (lexerrule_raw.type) { - case "ignore": { - return lib_lang.class_lexerrule.pattern_ignore(lexerrule_raw.parameters["pattern"]); - break; - } - case "void": { - return lib_lang.class_lexerrule.pattern_void(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); - break; - } - case "boolean": { - return lib_lang.class_lexerrule.pattern_boolean(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"], lexerrule_raw.parameters["value"]); - break; - } - case "int": { - return lib_lang.class_lexerrule.pattern_int(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); - break; - } - case "float": { - return lib_lang.class_lexerrule.pattern_float(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); - break; - } - case "string": { - return lib_lang.class_lexerrule.pattern_string(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); - break; - } - default: { - throw (new Error(`unhandled type for raw lexer-rule '${lexerrule_raw.type}'`)); - break; - } - } - }), - "parser_start": parser_start, - "parser_rules": parser_rules.map(parserrule_raw => { - return ({ - "label": parserrule_raw.label, - "premise": parserrule_raw.premise, - "conclusion": parserrule_raw.conclusion.map(entry => { - switch (entry.type) { - case "terminal": { - return (new lib_lang.class_symbol_terminal({ "id": entry.parameters["id"] })); - break; - } - case "variable": { - return (new lib_lang.class_symbol_variable(entry.parameters["id"])); - break; - } - default: { - throw (new Error(`unhandled type for raw parser-rule '${entry.type}'`)); - break; - } - } - }), - "right_to_left": parserrule_raw.right_to_left, - }); - }), - })); - } - } - lib_lang.class_reader = class_reader; -})(lib_lang || (lib_lang = {})); diff --git a/lib/plankton/observer/licence.txt b/lib/plankton/observer/licence.txt deleted file mode 100644 index d4e4821..0000000 --- a/lib/plankton/observer/licence.txt +++ /dev/null @@ -1,861 +0,0 @@ -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:observer« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:observer« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:observer«. If not, see . - - - - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. - - - - GNU LESSER GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - - This version of the GNU Lesser General Public License incorporates -the terms and conditions of version 3 of the GNU General Public -License, supplemented by the additional permissions listed below. - - 0. Additional Definitions. - - As used herein, "this License" refers to version 3 of the GNU Lesser -General Public License, and the "GNU GPL" refers to version 3 of the GNU -General Public License. - - "The Library" refers to a covered work governed by this License, -other than an Application or a Combined Work as defined below. - - An "Application" is any work that makes use of an interface provided -by the Library, but which is not otherwise based on the Library. -Defining a subclass of a class defined by the Library is deemed a mode -of using an interface provided by the Library. - - A "Combined Work" is a work produced by combining or linking an -Application with the Library. The particular version of the Library -with which the Combined Work was made is also called the "Linked -Version". - - The "Minimal Corresponding Source" for a Combined Work means the -Corresponding Source for the Combined Work, excluding any source code -for portions of the Combined Work that, considered in isolation, are -based on the Application, and not on the Linked Version. - - The "Corresponding Application Code" for a Combined Work means the -object code and/or source code for the Application, including any data -and utility programs needed for reproducing the Combined Work from the -Application, but excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - - You may convey a covered work under sections 3 and 4 of this License -without being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - - If you modify a copy of the Library, and, in your modifications, a -facility refers to a function or data to be supplied by an Application -that uses the facility (other than as an argument passed when the -facility is invoked), then you may convey a copy of the modified -version: - - a) under this License, provided that you make a good faith effort to - ensure that, in the event an Application does not supply the - function or data, the facility still operates, and performs - whatever part of its purpose remains meaningful, or - - b) under the GNU GPL, with none of the additional permissions of - this License applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - - The object code form of an Application may incorporate material from -a header file that is part of the Library. You may convey such object -code under terms of your choice, provided that, if the incorporated -material is not limited to numerical parameters, data structure -layouts and accessors, or small macros, inline functions and templates -(ten or fewer lines in length), you do both of the following: - - a) Give prominent notice with each copy of the object code that the - Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the object code with a copy of the GNU GPL and this license - document. - - 4. Combined Works. - - You may convey a Combined Work under terms of your choice that, -taken together, effectively do not restrict modification of the -portions of the Library contained in the Combined Work and reverse -engineering for debugging such modifications, if you also do each of -the following: - - a) Give prominent notice with each copy of the Combined Work that - the Library is used in it and that the Library and its use are - covered by this License. - - b) Accompany the Combined Work with a copy of the GNU GPL and this license - document. - - c) For a Combined Work that displays copyright notices during - execution, include the copyright notice for the Library among - these notices, as well as a reference directing the user to the - copies of the GNU GPL and this license document. - - d) Do one of the following: - - 0) Convey the Minimal Corresponding Source under the terms of this - License, and the Corresponding Application Code in a form - suitable for, and under terms that permit, the user to - recombine or relink the Application with a modified version of - the Linked Version to produce a modified Combined Work, in the - manner specified by section 6 of the GNU GPL for conveying - Corresponding Source. - - 1) Use a suitable shared library mechanism for linking with the - Library. A suitable mechanism is one that (a) uses at run time - a copy of the Library already present on the user's computer - system, and (b) will operate properly with a modified version - of the Library that is interface-compatible with the Linked - Version. - - e) Provide Installation Information, but only if you would otherwise - be required to provide such information under section 6 of the - GNU GPL, and only to the extent that such information is - necessary to install and execute a modified version of the - Combined Work produced by recombining or relinking the - Application with a modified version of the Linked Version. (If - you use option 4d0, the Installation Information must accompany - the Minimal Corresponding Source and Corresponding Application - Code. If you use option 4d1, you must provide the Installation - Information in the manner specified by section 6 of the GNU GPL - for conveying Corresponding Source.) - - 5. Combined Libraries. - - You may place library facilities that are a work based on the -Library side by side in a single library together with other library -facilities that are not Applications and are not covered by this -License, and convey such a combined library under terms of your -choice, if you do both of the following: - - a) Accompany the combined library with a copy of the same work based - on the Library, uncombined with any other library facilities, - conveyed under the terms of this License. - - b) Give prominent notice with the combined library that part of it - is a work based on the Library, and explaining where to find the - accompanying uncombined form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - - The Free Software Foundation may publish revised and/or new versions -of the GNU Lesser General Public License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. - - Each version is given a distinguishing version number. If the -Library as you received it specifies that a certain numbered version -of the GNU Lesser General Public License "or any later version" -applies to it, you have the option of following the terms and -conditions either of that published version or of any later version -published by the Free Software Foundation. If the Library as you -received it does not specify a version number of the GNU Lesser -General Public License, you may choose any version of the GNU Lesser -General Public License ever published by the Free Software Foundation. - - If the Library as you received it specifies that a proxy can decide -whether future versions of the GNU Lesser General Public License shall -apply, that proxy's public statement of acceptance of any version is -permanent authorization for you to choose that version for the -Library. - diff --git a/lib/plankton/observer/logic-decl.d.ts b/lib/plankton/observer/logic-decl.d.ts deleted file mode 100644 index 58e959c..0000000 --- a/lib/plankton/observer/logic-decl.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -declare module lib_observer { - /** - * @author fenris - */ - type type_eventname = string; - /** - * @author fenris - */ - type type_data = any; - /** - * @author fenris - */ - type type_action = (data: type_data) => void; - /** - * @author fenris - */ - type type_observer = { - actions: { - [eventname: string]: Array; - }; - force_registration: boolean; - no_attendants_warn_do: boolean; - no_attendants_warn_action: (eventname: type_eventname) => void; - }; - /** - * @author fenris - */ - function make({ "force_registration": force_registration, "no_attendants_warn_do": no_attendants_warn_do, "no_attendants_warn_action": no_attendants_warn_action, }?: { - force_registration?: boolean; - no_attendants_warn_do?: boolean; - no_attendants_warn_action?: (eventname: type_eventname) => void; - }): type_observer; - /** - * @author fenris - */ - function register(observer: type_observer, eventname: type_eventname): void; - /** - * @author fenris - */ - function attend(observer: type_observer, eventname: type_eventname, action: type_action): void; - /** - * @author fenris - */ - function notify(observer: type_observer, eventname: type_eventname, data: type_data): void; -} diff --git a/lib/plankton/observer/logic-impl.js b/lib/plankton/observer/logic-impl.js deleted file mode 100644 index a870934..0000000 --- a/lib/plankton/observer/logic-impl.js +++ /dev/null @@ -1,103 +0,0 @@ -/* -This file is part of »bacterio-plankton:observer«. - -Copyright 2016-2018 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' - - -»bacterio-plankton:observer« is free software: you can redistribute it and/or modify -it under the terms of the GNU Lesser General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -»bacterio-plankton:observer« is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public License -along with »bacterio-plankton:observer«. If not, see . - */ -var lib_observer; -(function (lib_observer) { - /** - * @author fenris - */ - function make(_a) { - var _b = _a === void 0 ? {} : _a, _c = _b["force_registration"], force_registration = _c === void 0 ? false : _c, _d = _b["no_attendants_warn_do"], no_attendants_warn_do = _d === void 0 ? false : _d, _e = _b["no_attendants_warn_action"], no_attendants_warn_action = _e === void 0 ? (function (eventname) { return console.warn("no attendants for event '" + eventname + "'"); }) : _e; - return { - "actions": {}, - "force_registration": force_registration, - "no_attendants_warn_do": no_attendants_warn_do, - "no_attendants_warn_action": no_attendants_warn_action, - }; - } - lib_observer.make = make; - /** - * @author fenris - */ - function present(observer, eventname) { - return (observer.actions.hasOwnProperty(eventname)); - } - /** - * @author fenris - */ - function register(observer, eventname) { - if (!present(observer, eventname)) { - observer.actions[eventname] = []; - } - else { - // do nothing - // warn that it is already registered? - } - } - lib_observer.register = register; - /** - * @author fenris - */ - function attend(observer, eventname, action) { - if (!present(observer, eventname)) { - if (observer.force_registration) { - throw (new Error("no event '" + eventname + "'")); - } - else { - register(observer, eventname); - } - } - else { - // do nothing - } - observer.actions[eventname].push(action); - } - lib_observer.attend = attend; - /** - * @author fenris - */ - function notify(observer, eventname, data) { - if (!present(observer, eventname)) { - if (observer.force_registration) { - throw (new Error("no event '" + eventname + "'")); - } - else { - register(observer, eventname); - } - } - else { - if (observer.no_attendants_warn_do) { - if (observer.actions[eventname].length <= 0) { - observer.no_attendants_warn_action(eventname); - } - else { - // do nothing - } - } - else { - // do nothing - } - observer.actions[eventname] - .forEach(function (action) { - action(data); - }); - } - } - lib_observer.notify = notify; -})(lib_observer || (lib_observer = {})); diff --git a/lib/plankton/plankton.d.ts b/lib/plankton/plankton.d.ts new file mode 100644 index 0000000..42917d2 --- /dev/null +++ b/lib/plankton/plankton.d.ts @@ -0,0 +1,1911 @@ +/** + * @author fenris + */ +declare type int = number; +/** + * @author fenris + */ +declare type float = number; +/** + * @author fenris + */ +declare type type_time = { + hours: int; + minutes: int; + seconds: int; +}; +/** + * @author fenris + */ +declare type type_pseudopointer = { + value: type_value; +}; +/** + * @author fenris + */ +declare function pseudopointer_null(): type_pseudopointer; +/** + * @author fenris + */ +declare function pseudopointer_make(value: type_value): type_pseudopointer; +/** + * @author fenris + */ +declare function pseudopointer_isset(pseudopointer: type_pseudopointer): boolean; +/** + * @author fenris + */ +declare function pseudopointer_read(pseudopointer: type_pseudopointer): type_value; +/** + * @author fenris + */ +declare function pseudopointer_write(pseudopointer: type_pseudopointer, value: type_value): void; +declare var process: any; +declare var require: any; +declare class Buffer { + constructor(x: string, modifier?: string); + toString(modifier?: string): string; +} +declare var java: any; +declare module lib_base { + /** + * @author fenris + */ + function environment(): string; +} +/** + * @author fenris + */ +declare var instance_verbosity: int; +/** + * @desc the ability to check for equality with another element of the same domain + * @author fenris + */ +interface interface_collatable { + /** + * @author fenris + */ + _collate(value: type_value): boolean; +} +/** + * @author fenris + */ +declare function instance_collate(value1: type_value, value2: type_value): boolean; +/** + * @desc the ability to compare with another element of the same domain for determining if the first is "smaller than or equal to" the latter + * @author fenris + */ +interface interface_comparable { + /** + * @author fenris + */ + _compare(value: type_value): boolean; +} +/** + * @author fenris + */ +declare function instance_compare(value1: type_value, value2: type_value): boolean; +/** + * @desc the ability to create an exact copy + * @author fenris + */ +interface interface_cloneable { + /** + * @author fenris + */ + _clone(): type_value; +} +/** + * @author fenris + */ +declare function instance_clone(value: type_value): type_value; +/** + * @author fenris + */ +interface interface_hashable { + /** + * @author fenris + */ + _hash(): string; +} +/** + * @desc the ability to generate a string out of the element, which identifies it to a high degree + * @author fenris + */ +declare function instance_hash(value: type_value): string; +/** + * @author fenris + */ +interface interface_showable { + /** + * @author fenris + */ + _show(): string; +} +/** + * @desc the ability to map the element to a textual representation (most likely not injective) + * @author fenris + */ +declare function instance_show(value: type_value): string; +/** + * @todo outsource to dedicated plankton-lib + */ +declare module lib_log { + /** + * @author fenris + */ + function log(...args: Array): void; + /** + * @author fenris + */ + function info(...args: Array): void; + /** + * @author fenris + */ + function warn(...args: Array): void; + /** + * @author fenris + */ + function error(...args: Array): void; +} +/** + * @author frac + */ +interface interface_decorator { + /** + * @author frac + */ + core: type_core; +} +/** + * @author frac + */ +declare class class_observer { + /** + * @author frac + */ + protected counter: int; + /** + * @author frac + */ + protected actions: { + [id: string]: (information: Object) => void; + }; + /** + * @author frac + */ + protected buffer: Array; + /** + * @author frac + */ + constructor(); + /** + * @author frac + */ + empty(): boolean; + /** + * @author frac + */ + flush(): void; + /** + * @author frac + */ + set(id: string, action: (information: Object) => void): void; + /** + * @author frac + */ + del(id: string): void; + /** + * @author frac + */ + add(action: (information: Object) => void): void; + /** + * @author frac + */ + notify(information?: Object, delayed?: boolean): void; + /** + * @author frac + */ + rollout(): void; +} +/** + * @author frac + */ +/** + * @author frac + */ +declare module lib_maybe { + /** + * @author fenris + */ + type type_maybe = { + kind: string; + parameters: Object; + }; + /** + * @author fenris + */ + function make_nothing(): type_maybe; + /** + * @author fenris + */ + function make_just(value: type_value): type_maybe; + /** + * @author fenris + */ + function is_nothing(maybe: type_maybe): boolean; + /** + * @author fenris + */ + function is_just(maybe: type_maybe): boolean; + /** + * @author fenris + */ + function cull(maybe: type_maybe): type_value; + /** + * @author fenris + */ + function propagate(maybe: type_maybe, function_: (value: type_value) => type_maybe): type_maybe; +} +/** + * @author fenris + */ +declare class class_maybe implements interface_showable { + /** + * @desc whether the wrapper is nothing + * @author fenris + */ + is_nothing(): boolean; + /** + * @desc whether the wrapper is just + * @author fenris + */ + is_just(): boolean; + /** + * @desc return the value, stored in the maybe-wrapper + * @author fenris + */ + cull(): type_value; + /** + * @author fenris + */ + toString(): string; + /** + * @author fenris + */ + distinguish(action_just: (value?: type_value) => void, action_nothing?: (reason?: string) => void): void; + /** + * @author fenris + */ + propagate(action: (value: type_value) => class_maybe): class_maybe; + /** + * @desc [implementation] + * @author fenris + */ + _show(): string; +} +/** + * @author fenris + */ +declare class class_nothing extends class_maybe { + /** + * @author fenris + */ + private reason; + /** + * @author fenris + */ + constructor(reason?: string); + /** + * @author fenris + */ + is_nothing(): boolean; + /** + * @author fenris + */ + is_just(): boolean; + /** + * @author fenris + */ + cull(): type_value; + /** + * @author fenris + */ + toString(): string; + /** + * @author fenris + */ + reason_get(): string; + /** + * @author fenris + */ + distinguish(action_just: (value?: type_value) => void, action_nothing?: (reason?: string) => void): void; + /** + * @author fenris + */ + propagate(action: (value: type_value) => class_maybe): class_maybe; +} +/** + * @author fenris + */ +declare class class_just extends class_maybe { + /** + * @author fenris + */ + private value; + /** + * @author fenris + */ + constructor(value: type_value); + /** + * @author fenris + */ + is_nothing(): boolean; + /** + * @author fenris + */ + is_just(): boolean; + /** + * @author fenris + */ + cull(): type_value; + /** + * @author fenris + */ + toString(): string; + /** + * @author fenris + */ + distinguish(action_just: (value?: type_value) => void, action_nothing?: (reason?: string) => void): void; + /** + * @author fenris + */ + propagate(action: (value: type_value) => class_maybe): class_maybe; +} +/** + * @author frac + */ +declare class class_error extends Error { + /** + * @author frac + */ + protected suberrors: Array; + /** + * @author frac + */ + protected mess: string; + /** + * @author frac + */ + constructor(message: string, suberrors?: Array); + /** + * @override + * @author frac + */ + toString(): string; +} +declare module lib_call { + /** + * @desc hacked class for postfix function application + * @author fenris + */ + class class_valuewrapper { + /** + * @author fenris + */ + protected value: type_value; + /** + * @desc [constructor] + * @author fenris + */ + constructor(value: type_value); + /** + * @desc [accessor] applies a function and returns a new valuewrapper + * @author fenris + */ + pass(function_: (value: type_value) => type_value_): class_valuewrapper; + /** + * @desc [accessor] gives the wrapped value + * @author fenris + */ + extract(): type_value; + } + /** + * @desc shortcut for constructing a valuewrapper-object + * @author fenris + */ + function vw(value: type_value): class_valuewrapper; + /** + * @author fenris + */ + function use(input: type_input, function_: (input: type_input) => type_output): type_output; + /** + * @desc just the identity; useful for some callbacks etc. + * @author fenris + */ + function id(x: type_value): type_value; + /** + * @desc composes two functions (i.e. returns a function that return the result of the successive execution of both input-functions) + * @param {function} function_f + * @param {function} function_g + * @author fenris + */ + function compose(function_f: (type_x: any) => type_y, function_g: (type_y: any) => type_z): (value: type_x) => type_z; + /** + * @desc transforms a function with sequential input into a function with leveled input; example: add(2,3) = curryfy(add)(2)(3) + * @param {function} f + * @param {int} n (don't set manually) + * @return {function} the currified version of the in put function + * @author fenris + */ + function curryfy(f: Function, n?: int): Function; +} +declare module lib_call { + /** + * @author fenris + */ + type type_executor = ((resolve: (result?: type_result) => any, reject?: (reason?: type_reason) => void) => void); + /** + * @author fenris + */ + function executor_resolve(result: type_result): type_executor; + /** + * @author fenris + */ + function executor_reject(reason: type_reason): type_executor; + /** + * @author fenris + */ + function executor_transform(executor: type_executor, transform_result: (result_from: type_result_from) => type_result_to, transform_reason: (error_from: type_error_from) => type_error_to): type_executor; + /** + * @author fenris + */ + function executor_transform_default(executor: type_executor, transform_result: (result_from: type_result_from) => type_result_to, wrap_string?: string): type_executor; + /** + * @author fenris + */ + function executor_compose_sequential(first: type_executor, second: (result: type_result_first) => type_executor): type_executor; + /** + * @author fenris + */ + function executor_chain(state: type_state, executors: Array<(state: type_state) => type_executor>): type_executor; + /** + * @author fenris + */ + function executor_first(executors: Array>): type_executor>; + /** + * @author fenris + */ + function executor_condense(executors: Array>): type_executor, Error>; + /** + * @author fenris + * @deprecated use condense + */ + function executor_filter(executors: Array>, predicate: (element: type_element) => boolean): type_executor, Error>; + /** + * @author fenris + * @deprecated use condense + */ + function executor_map(executors: Array>, transformator: (element1: type_element1) => type_element2): type_executor, Error>; + /** + * @author fenris + * @deprecated use condense + */ + function executor_reduce(executors: Array>, initial: type_result, accumulator: (result: type_result, element: type_element) => type_result): type_executor; +} +declare module lib_call { + /** + * @author fenris + */ + type type_promise = Promise; + /** + * @author fenris + */ + function promise_reject(reason: type_reason): type_promise; + /** + * @author fenris + */ + function promise_resolve(result: type_result): type_promise; + /** + * @author fenris + */ + function promise_make(executor: (resolve: (result?: type_result) => void, reject: (reason?: type_reason) => void) => void): type_promise; + /** + * @author fenris + */ + function promise_then_close(promise: type_promise, resolver: (result: type_result) => void, rejector: (reason: type_reason) => void): void; + /** + * @author fenris + */ + function promise_then_append(promise: type_promise, resolver: (result: type_result) => type_promise, rejector?: (reason: type_reason) => type_promise): type_promise; + /** + * @author fenris + */ + function promise_all(promises: Array>): type_promise, type_reason>; + /** + * @author fenris + */ + function promise_chain(promises: Array<(input: type_result) => type_promise>, start?: type_result): type_promise; + /** + * @author fenris + */ + function promise_condense(promises: Array<() => type_promise>): type_promise, type_reason>; + /** + * @author fenris + */ + function promise_group(promises: { + [name: string]: () => type_promise; + }, serial?: boolean): type_promise<{ + [name: string]: any; + }, type_reason>; + /** + * @author fenris + */ + function promise_wrap(promise: type_promise, transformator_result: (reason: type_result_inner) => type_result_outer, transformator_reason?: (reason: type_reason) => type_reason): type_promise; + /** + * @author fenris + */ + function promise_show(label: string): (result: type_result) => type_promise; + /** + * @author fenris + */ + function promise_log(result: type_result): (result: type_result) => type_promise; + /** + * @author fenris + */ + function promise_attach(state: { + [name: string]: any; + }, promise: type_promise, name: string): type_promise<{ + [name: string]: any; + }, type_reason>; + /** + * @author fenris + */ + function promise_delay(promise: type_promise, delay: int): type_promise; + /** + * @author fenris + */ + function promise_to_executor(promise: type_promise): type_executor; +} +declare module lib_call { + /** + * @author fenris + */ + type type_initializer_state = int; + const initializer_state_initial: type_initializer_state; + const initializer_state_waiting: type_initializer_state; + const initializer_state_successful: type_initializer_state; + const initializer_state_failed: type_initializer_state; + /** + * @author fenris + */ + type type_initializer = { + fetcher: () => type_promise; + state?: type_initializer_state; + queue: Array<{ + resolve: (result?: type_result) => void; + reject: (reason?: type_reason) => void; + }>; + result?: type_result; + reason?: type_reason; + }; + /** + * @author fenris + */ + function initializer_make(fetcher: () => type_promise): type_initializer; + /** + * @author fenris + */ + function initializer_reset(subject: type_initializer): void; + /** + * @author fenris + */ + function initializer_state(subject: type_initializer): type_initializer_state; + /** + * @author fenris + */ + function initializer_get(subject: type_initializer): type_promise; +} +declare module lib_call { + /** + * @author fenris + */ + type type_deferral = { + representation: (input: type_input) => Promise; + }; + /** + * @author fenris + * @desc activates the deferral and handles its output according to a given procedure + * @param {(value : type_value)=>void} procedure a function which receives the output of the deferral as argument + */ + function deferral_use(deferral: type_deferral, input: type_input, procedure: (output: type_output) => void): void; + /** + * @author fenris + * @desc creates a deferral-subject (similar to "new Promise", where "convey" reflects "resolve"/"reject") + */ + function deferral_make(handler: (input: type_input, convey: (output: type_output) => void) => void): type_deferral; + /** + * @author fenris + * @desc wraps a simple function into a deferral (similar to "Promise.resolve"/"Promise.reject") + */ + function deferral_wrap(function_: (input: type_input) => type_output): type_deferral; + /** + * @author fenris + */ + function deferral_id(): type_deferral; + /** + * @author fenris + */ + function deferral_const(value: type_value): type_deferral; + /** + * @author fenris + */ + function deferral_delay(output: type_output, delay: int): type_deferral; + /** + * @author fenris + * @desc connects two deferrals to form a new one; the output of the first is taken as input for the second + * (similar to "Promise.then" when passing a function which returns a new promise) + * @param {type_deferral} first a simple deferral + * @param {(value1 : type_value1)=>type_deferral} second a function depending from a value returning a deferral + */ + function deferral_compose_serial(first: type_deferral, second: type_deferral): type_deferral; + /** + * @author fenris + */ + function deferral_compose_parallel({ "left": deferral_left, "right": deferral_right, }: { + left: type_deferral; + right: type_deferral; + }): type_deferral; + /** + * @author fenris + * @desc repeatedly applied serial composition + */ + function deferral_chain(members: Array>): type_deferral; + /** + * @author fenris + */ +} +declare module lib_call { + /** + * @author fenris + */ + class class_deferral { + /** + * @author fenris + */ + private subject; + /** + * @author fenris + */ + private constructor(); + /** + * @author fenris + */ + private static _cram; + /** + * @author fenris + */ + private static _tear; + /** + * @author fenris + */ + static make(handler: (input: type_input, convey: (value: type_output) => void) => void): class_deferral; + /** + * @author fenris + */ + use(input: type_input, procedure: (value: type_output) => void): void; + /** + * @author fenris + */ + compose_serial(second: class_deferral): class_deferral; + /** + * @author fenris + */ + static chain(members: Array>): class_deferral; + /** + * @author fenris + */ + static wrap(function_: (input: type_input) => type_output): class_deferral; + /** + * @author fenris + */ + static const_(value: type_value): class_deferral; + /** + * @author fenris + */ + static delay(output: type_output, delay: int): class_deferral; + } +} +declare module lib_call { + /** + * @author fenris + */ + function timeout(function_: () => void, delay: int): int; + /** + * @desc a definition for a value being "defined" + * @author neuc + */ + function is_def(obj: type_value, null_is_valid?: boolean): boolean; + /** + * @desc returns the value if set and, when a type is specified, if the type is correct, if not return default_value + * @author neuc + */ + function def_val(value: any, default_value: any, type?: string, null_is_valid?: boolean): any; + /** + * @desc just the empty function; useful for some callbacks etc. + * @author fenris + */ + function nothing(): void; + /** + * @desc outputs + * @author fenris + */ + function output(...args: Array): void; + /** + * @desc converts the "arguments"-map into an array + * @param {Object} args + * @author fenris + */ + function args2list(args: any): Array; + /** + * @desc provides the call for an attribute of a class as a regular function + * @param {string} name the name of the attribute + * @return {*} + * @author fenris + */ + function attribute(name: string): (object: type_object) => type_attribute; + /** + * @desc provides a method of a class as a regular function + * @param {string} name the name of the method + * @return {function} + * @author fenris + */ + function method(name: string): (object: type_object) => type_output; + /** + * @author fenris + */ + type type_unival = { + kind: string; + data?: any; + }; + /** + * @author fenris + */ + function distinguish(unival: type_unival, handlers: { + [kind: string]: (data?: any) => any; + }, fallback?: (unival?: type_unival) => any): any; +} +declare namespace lib_plankton.log { + /** + */ + enum enum_level { + debug = 0, + info = 1, + notice = 2, + warning = 3, + error = 4 + } + /** + */ + function level_order(level1: enum_level, level2: enum_level): boolean; + /** + */ + function level_show(level: enum_level): string; + /** + */ + type type_entry = { + level: enum_level; + incident: string; + details: { + [name: string]: any; + }; + }; +} +/** + * @deprecated + * @todo remove + */ +declare module lib_log { + function level_push(level: int): void; + function level_pop(): void; + function indent_push(indent: int): void; + function indent_pop(): void; + function indent_inc(): void; + function indent_dec(): void; + /** + * @author fenris + */ + function write({ "message": message, "type": type, "prefix": prefix, "level": level, "indent": indent, }: { + message?: string; + type?: string; + prefix?: string; + level?: int; + indent?: int; + }): void; +} +declare namespace lib_plankton.log { + /** + */ + abstract class class_channel { + /** + */ + abstract add(entry: type_entry): void; + } +} +declare namespace lib_plankton.log { + /** + */ + class class_channel_console extends class_channel { + /** + */ + add(entry: type_entry): void; + } +} +declare namespace lib_plankton.log { + /** + */ + class class_channel_notify extends class_channel { + /** + */ + add(entry: type_entry): void; + } +} +declare namespace lib_plankton.log { + /** + */ + class class_channel_minlevel extends class_channel { + /** + */ + private core; + /** + */ + private threshold; + /** + */ + constructor(core: class_channel, threshold: enum_level); + /** + */ + add(entry: type_entry): void; + } +} +declare namespace lib_plankton.log { + /** + */ + function channel_make(description: { + kind: string; + data?: { + [key: string]: any; + }; + }): class_channel; +} +declare namespace lib_plankton.log { + /** + */ + function conf_default(): Array; + /** + */ + function conf_push(channels: Array): void; + /** + */ + function conf_pop(): void; + /** + */ + function setup(): void; + /** + */ + function add(entry: type_entry): void; + /** + */ + function debug(incident: string, details?: { + [name: string]: any; + }): void; + /** + */ + function info(incident: string, details?: { + [name: string]: any; + }): void; + /** + */ + function notice(incident: string, details?: { + [name: string]: any; + }): void; + /** + */ + function warning(incident: string, details?: { + [name: string]: any; + }): void; + /** + */ + function error(incident: string, details?: { + [name: string]: any; + }): void; +} +declare namespace lib_args { + /** + */ + enum enum_environment { + cli = "cli", + url = "url" + } + /** + */ + enum enum_kind { + positional = "positional", + volatile = "volatile" + } + /** + */ + enum enum_type { + boolean = "boolean", + integer = "int", + float = "float", + string = "string" + } + /** + */ + enum enum_mode { + replace = "replace", + accumulate = "accumulate" + } +} +declare module lib_args { + /** + * @author fenris + */ + class class_argument { + /** + * @author fenris + */ + protected name: string; + /** + * @author fenris + */ + protected kind: enum_kind; + /** + * @author fenris + */ + protected type: enum_type; + /** + * @author fenris + */ + protected mode: enum_mode; + /** + * @author fenris + */ + protected default_: any; + /** + * @author fenris + */ + protected info: string; + /** + * @author fenris + */ + protected parameters: Object; + /** + * @author fenris + */ + protected hidden: boolean; + /** + * @author fenris + */ + constructor({ "name": name, "type": type, "kind": kind, "mode": mode, "default": default_, "info": info, "parameters": parameters, "hidden": hidden, }: { + name: string; + type?: enum_type; + kind?: enum_kind; + mode?: enum_mode; + default?: any; + info?: string; + parameters?: Object; + hidden?: boolean; + }); + /** + * @author fenris + */ + static positional({ "name": name, "type": type, "mode": mode, "default": default_, "info": info, "hidden": hidden, "index": index, }: { + name: string; + type?: enum_type; + mode?: enum_mode; + default?: any; + info?: string; + hidden?: boolean; + index: int; + }): class_argument; + /** + * @author fenris + */ + static volatile({ "name": name, "type": type, "mode": mode, "default": default_, "info": info, "hidden": hidden, "indicators_short": indicators_short, "indicators_long": indicators_long, }: { + name: string; + type?: enum_type; + mode?: enum_mode; + default?: any; + info?: string; + hidden?: boolean; + indicators_short: Array; + indicators_long: Array; + }): class_argument; + /** + * @author fenris + */ + check(): boolean; + /** + * @author fenris + */ + name_get(): string; + /** + * @author fenris + */ + kind_get(): enum_kind; + /** + * @author fenris + */ + type_get(): enum_type; + /** + * @author fenris + */ + mode_get(): enum_mode; + /** + * @author fenris + */ + default_get(): any; + /** + * @author fenris + */ + parameters_get(): Object; + /** + * @author fenris + */ + hidden_get(): boolean; + /** + * @author fenris + */ + toString(): string; + /** + * @author fenris + */ + indicator_main(): string; + /** + * @author fenris + */ + pattern_value(): string; + /** + * @author fenris + */ + extract(raw: string): any; + /** + * @author fenris + */ + assign(data: Object, target: string, raw: string): void; + /** + * @author fenris + */ + make(data: Object, target: string): string; + /** + * @author fenris + */ + generate_help(): string; + } +} +declare module lib_args { + /** + * @author fenris + */ + var verbosity: int; + /** + * @author fenris + * @todo check validity + */ + class class_handler { + /** + * @author fenris + */ + protected arguments_: { + [name: string]: class_argument; + }; + /** + * @author fenris + */ + constructor(arguments_: { + [name: string]: class_argument; + }); + /** + * @author fenris + */ + filter(kind: enum_kind): { + [name: string]: class_argument; + }; + /** + * @author fenris + */ + read(environment: enum_environment, input: string, data?: { + [name: string]: any; + }): { + [name: string]: any; + }; + /** + * @author fenris + * @todo handle if the data object doesn't have the required field or the type is wrong or sth. + */ + write(environment: enum_environment, data: { + [name: string]: any; + }): string; + /** + * @desc manpage-like info-sheet + * @author fenris + */ + generate_help({ "programname": programname, "author": author, "description": description, "executable": executable, }: { + programname?: string; + author?: string; + description?: string; + executable?: string; + }): string; + } +} +declare module lib_client { + /** + * @author fenris + */ + type type_subject = { + host: string; + port: int; + verbosity: int; + }; + /** + * @author fenris + */ + function make(host: string, port: int, verbosity?: int): type_subject; + /** + * @author fenris + */ + function query(subject: type_subject, input: string): Promise; +} +declare module lib_client { + /** + * @author fenris + */ + class class_client { + /** + * @author fenris + */ + protected subject: type_subject; + /** + * @author fenris + */ + constructor(host: string, port: int, verbosity: int); + /** + * @author fenris + */ + query(input: string): Promise; + } +} +declare module lib_file { + /** + * @author fenris,maspr + * @todo clear up if http(s)-handling belongs here or not ... + */ + function read_promise(path: string): lib_call.type_promise; + /** + * @author fenris + */ + function write_promise(path: string, content: string): lib_call.type_promise; + /** + * @author fenris + */ + function read_stdin(): Promise; +} +declare module lib_file { + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function read_json_promise(path: string): lib_call.type_promise; + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function write_json_promise(path: string, data: any): lib_call.type_promise; + /** + * @author fenris + * @deprecated use promises instead of executors + */ + function read_executor(path: string): lib_call.type_executor; + /** + * @author fenris + * @deprecated use promises instead of executors + */ + function write_executor(path: string, content: string): lib_call.type_executor; + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + * @deprecated use promises instead of executors + */ + function read_json_executor(path: string): lib_call.type_executor; + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + * @deprecated use promises instead of executors + */ + function write_json_executor(path: string, data: any): lib_call.type_executor; + /** + * @desc reads a file + * @author fenris + * @todo replace with promise version + */ + function read(path: string): lib_call.type_executor; + /** + * @desc writes a file + * @author fenris + * @todo replace with promise version + */ + function write(path: string, content: string): lib_call.type_executor; + /** + * @desc reads a json file + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function read_json(path: string): lib_call.type_executor; + /** + * @desc writes a json file + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function write_json(path: string, data: any): lib_call.type_executor; +} +declare module lib_observer { + /** + * @author fenris + */ + type type_eventname = string; + /** + * @author fenris + */ + type type_data = any; + /** + * @author fenris + */ + type type_action = (data: type_data) => void; + /** + * @author fenris + */ + type type_observer = { + actions: { + [eventname: string]: Array; + }; + force_registration: boolean; + no_attendants_warn_do: boolean; + no_attendants_warn_action: (eventname: type_eventname) => void; + }; + /** + * @author fenris + */ + function make({ "force_registration": force_registration, "no_attendants_warn_do": no_attendants_warn_do, "no_attendants_warn_action": no_attendants_warn_action, }?: { + force_registration?: boolean; + no_attendants_warn_do?: boolean; + no_attendants_warn_action?: (eventname: type_eventname) => void; + }): type_observer; + /** + * @author fenris + */ + function register(observer: type_observer, eventname: type_eventname): void; + /** + * @author fenris + */ + function attend(observer: type_observer, eventname: type_eventname, action: type_action): void; + /** + * @author fenris + */ + function notify(observer: type_observer, eventname: type_eventname, data: type_data): void; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + type char = string; + /** + * @author fenris + */ + type type_terminal_default = { + id: string; + data?: Object; + }; + /** + * @author fenris + */ + function find(word: Array, part: Array, equality: (x: type_x, y: type_y) => boolean, /*= instance_collate*/ right_to_left?: boolean): int; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + interface interface_symbol { + /** + * @author fenris + */ + equals(symbol: interface_symbol): boolean; + /** + * @author fenris + */ + toString(): string; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + class class_symbol_terminal implements interface_symbol { + /** + * @author fenris + */ + protected terminal: type_terminal; + /** + * @author fenris + */ + protected equality_terminal: (x: type_terminal, y: type_terminal) => boolean; + /** + * @desc [constructor] + * @author fenris + */ + constructor(terminal: type_terminal, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean); + /** + * @author fenris + */ + terminal_get(): type_terminal; + /** + * @override + * @author fenris + */ + equals(symbol: interface_symbol): boolean; + /** + * @override + * @author fenris + */ + toString(): string; + /** + * @author fenris + */ + static tree_generic(terminal: type_terminal): class_symbol_terminal>; + /** + * @author fenris + */ + static tree_default(terminal: type_terminal_default): class_symbol_terminal>; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + class class_symbol_variable implements interface_symbol { + /** + * @author fenris + */ + protected variable: type_variable; + /** + * @author fenris + */ + protected meaning: type_meaning; + /** + * @desc [constructor] + * @author fenris + */ + constructor(variable: type_variable, meaning?: type_meaning); + /** + * @desc [accessor] [getter] + * @author fenris + */ + variable_get(): type_variable; + /** + * @desc [accessor] [getter] + * @author fenris + */ + meaning_get(): type_meaning; + /** + * @override + * @author fenris + */ + equals(symbol: interface_symbol): boolean; + /** + * @override + * @author fenris + */ + toString(): string; + /** + * @author fenris + */ + static tree_generic(variable: type_variable): class_symbol_variable>; + /** + * @author fenris + */ + static tree_default(variable: string): class_symbol_variable>; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + interface interface_lexer { + /** + * @author fenris + */ + run(input: Array): Array; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + type type_token = { + sequence: Array; + terminal: class_maybe; + }; + /** + * @author fenris + */ + type type_lexerrule = { + search: (part: Array) => { + found: boolean; + data?: { + position?: int; + length?: int; + }; + }; + construct: (part: Array) => Array; + observer: lib_observer.type_observer; + }; + /** + * @author fenris + */ + function lexerrule_make(search: (part: Array) => { + found: boolean; + data?: { + position?: int; + length?: int; + }; + }, construct: (part: Array) => Array): type_lexerrule; + /** + * @author fenris + * @todo schön machen? is aber vermutlich gar nicht möglich :/ + */ + function lexerrule_show(rule: type_lexerrule): string; + /** + * @author fenris + */ + function lexerrule_apply(rule: type_lexerrule, tokens: Array>): Array>; + /** + * @author fenris + */ + function lexerrule_pass(): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_generic(rule_raw: { + pattern: string; + construct: (part: Array) => Array; + }): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_ignore(pattern: string): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_void(pattern: string, id: string): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_boolean(pattern: string, id: string, value: boolean): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_int(pattern: string, id: string): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_float(pattern: string, id: string): type_lexerrule; + /** + * @author fenris + */ + function lexerrule_pattern_string(pattern: string, id: string): type_lexerrule; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + * @todo warn on prefix-detection + * @todo after rule application don't start from the beginning but from the last position + */ + type type_lexer_dumb = { + rules: Array>; + observer: lib_observer.type_observer; + }; + /** + * @author fenris + */ + function lexer_dumb_make(rules: Array>): type_lexer_dumb; + /** + * @author fenris + */ + function lexer_dumb_run(subject: type_lexer_dumb, input: Array, configuration?: { + use_reduce?: boolean; + }): Array; + /** + * @author fenris + */ + function lexer_dumb_pass(): type_lexer_dumb; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + class class_lexerrule { + /** + * @author fenris + */ + protected subject: type_lexerrule; + /** + * @author fenris + */ + constructor(subject: type_lexerrule); + /** + * @author fenris + */ + static construct({ "search": search, "construct": construct, }: { + search: (part: Array) => { + found: boolean; + data?: { + position?: int; + length?: int; + }; + }; + construct: (part: Array) => Array; + }): class_lexerrule; + /** + * @author fenris + */ + subject_get(): type_lexerrule; + /** + * @author fenris + */ + search(part: Array): { + found: boolean; + data?: { + position?: int; + length?: int; + }; + }; + /** + * @author fenris + */ + construct(part: Array): Array; + /** + * @author fenris + */ + static pass(): class_lexerrule; + /** + * @author fenris + */ + static pattern_generic(rule_raw: { + pattern: string; + construct: (part: Array) => Array; + }): class_lexerrule; + /** + * @author fenris + */ + static pattern_ignore(pattern: string): class_lexerrule; + /** + * @author fenris + */ + static pattern_void(pattern: string, id: string): class_lexerrule; + /** + * @author fenris + */ + static pattern_boolean(pattern: string, id: string, value: boolean): class_lexerrule; + /** + * @author fenris + */ + static pattern_int(pattern: string, id: string): class_lexerrule; + /** + * @author fenris + */ + static pattern_float(pattern: string, id: string): class_lexerrule; + /** + * @author fenris + */ + static pattern_string(pattern: string, id: string): class_lexerrule; + } + /** + * @author fenris + */ + class class_lexer_dumb implements interface_lexer { + /** + * @author fenris + */ + protected subject: type_lexer_dumb; + /** + * @author fenris + */ + constructor(subject: type_lexer_dumb); + /** + * @author fenris + */ + static construct(rules: Array>): class_lexer_dumb; + /** + * @author fenris + */ + run(input: Array): Array; + /** + * @author fenris + */ + static pass(): class_lexer_dumb; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + interface interface_parser { + /** + * @param input the input sequence to parse + * @param target_variable if not passed, this value should fall back to the start symbol of the grammar + * @author fenris + */ + run(input: Array, target_variable?: type_variable): type_meaning; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + type type_tree = { + label?: string; + value: Array; + children: Array>; + }; + /** + * @author fenris + */ + type type_parserrule = { + premise: type_variable; + conclusion: Array>; + construct: (args: Array, terminals: Array) => type_meaning; + right_to_left: boolean; + }; + /** + * @desc [constructor] + * @author fenris + */ + function parserrule_make({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left, }: { + premise: type_variable; + conclusion: Array>; + construct: (args: Array, terminals: Array) => type_meaning; + right_to_left?: boolean; + }): { + premise: type_variable; + conclusion: interface_symbol[]; + construct: (args: type_meaning[], terminals: type_terminal[]) => type_meaning; + right_to_left: boolean; + }; + /** + * @author fenris + */ + function parserrule_check(parserrule: type_parserrule, sequence: Array>): int; + /** + * @author fenris + */ + function parserrule_construct(parserrule: type_parserrule, args: Array, terminals: Array): type_meaning; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + * @todo fatal error on empty conclusion + */ + type type_parser_dumb = { + start: type_variable; + rules: Array>; + equality_terminal: (x: type_terminal, y: type_terminal) => boolean; + observer: lib_observer.type_observer; + }; + /** + * @author fenris + */ + function parser_dumb_make(start: type_variable, rules: Array>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): type_parser_dumb; + /** + * @override + * @author fenris + */ + function parser_dumb_run(parser_dumb: type_parser_dumb, input: Array, target_variable?: type_variable): type_meaning; + /** + * @author fenris + */ + function parser_dumb_tree(start: type_variable, rules_raw: Array<{ + premise: type_variable; + conclusion: Array>>; + label?: string; + right_to_left?: boolean; + }>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): type_parser_dumb>; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + class class_parserrule { + /** + * @author fenris + */ + protected subject: type_parserrule; + /** + * @desc [constructor] + * @author fenris + */ + private constructor(); + /** + * @desc [constructor] + * @author fenris + */ + static construct({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left, }: { + premise: type_variable; + conclusion: Array>; + construct: (args: Array, terminals: Array) => type_meaning; + right_to_left?: boolean; + }): class_parserrule; + /** + * @desc [accessor] [getter] + * @author fenris + */ + subject_get(): type_parserrule; + /** + * @desc [accessor] [getter] + * @author fenris + */ + premise_get(): type_variable; + /** + * @desc [accessor] [getter] + * @author fenris + */ + conclusion_get(): Array>; + /** + * @desc [accessor] + * @author fenris + */ + check(sequence: Array>): int; + /** + * @desc [accessor] + * @author fenris + */ + construct(args: Array, terminals: Array): type_meaning; + } + /** + * @author fenris + * @todo fatal error on empty conclusion + */ + class class_parser_dumb implements interface_parser { + /** + * @author fenris + */ + protected subject: type_parser_dumb; + /** + * @author fenris + */ + private constructor(); + /** + * @author fenris + */ + static construct(start: type_variable, rules: Array>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): class_parser_dumb; + /** + * @override + * @author fenris + */ + run(input: Array, target_variable?: type_variable): type_meaning; + /** + * @author fenris + */ + static tree(start: type_variable, rules_raw: Array<{ + premise: type_variable; + conclusion: Array>>; + label?: string; + right_to_left?: boolean; + }>, equality_terminal?: (x: type_terminal, y: type_terminal) => boolean): class_parser_dumb>; + } +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + function reader_run(lexer_run: (input: Array) => Array, parser_run: (input: Array, target_variable?: type_variable) => type_meaning, input: Array, target_variable?: type_variable): type_meaning; + /** + * @author fenris + */ + type type_parser_rule_default = { + premise: string; + conclusion: Array>>; + label?: string; + right_to_left?: boolean; + }; + /** + * @author fenris + */ + function reader_default({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }: { + lexer_rules: Array>; + parser_start: string; + parser_rules: Array; + }): class_reader>; + /** + * @author fenris + */ + type type_raw_parser_rule = { + premise: string; + conclusion: Array<{ + type: string; + parameters?: Object; + }>; + label?: string; + right_to_left?: boolean; + }; + /** + * @author fenris + */ + function default_raw({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }: { + lexer_rules: Array<{ + type: string; + parameters?: Object; + }>; + parser_start: string; + parser_rules: Array; + }): class_reader>; +} +declare namespace lib_plankton.lang { + /** + * @author fenris + */ + class class_reader { + /** + * @author fenris + */ + protected lexer: interface_lexer; + /** + * @author fenris + */ + protected parser: interface_parser; + /** + * @author fenris + */ + constructor(lexer: interface_lexer, parser: interface_parser); + /** + * @desc [accessor] yes, it's really just lexing and parsing + * @author fenris + */ + run(input: Array, target_variable?: type_variable): type_result; + /** + * @author fenris + */ + static default({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }: { + lexer_rules: Array>; + parser_start: string; + parser_rules: Array<{ + premise: string; + conclusion: Array>>; + label?: string; + right_to_left?: boolean; + }>; + }): class_reader>; + /** + * @author fenris + */ + static default_raw({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }: { + lexer_rules: Array<{ + type: string; + parameters?: Object; + }>; + parser_start: string; + parser_rules: Array<{ + premise: string; + conclusion: Array<{ + type: string; + parameters?: Object; + }>; + label?: string; + right_to_left?: boolean; + }>; + }): class_reader>; + } +} diff --git a/lib/plankton/plankton.js b/lib/plankton/plankton.js new file mode 100644 index 0000000..ab08472 --- /dev/null +++ b/lib/plankton/plankton.js @@ -0,0 +1,4842 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +// } +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +/** + * @author fenris + */ +/*export*/ function pseudopointer_null() { + return { + "value": null + }; +} +/** + * @author fenris + */ +/*export*/ function pseudopointer_make(value) { + return { + "value": value + }; +} +/** + * @author fenris + */ +/*export*/ function pseudopointer_isset(pseudopointer) { + return (pseudopointer.value != null); +} +/** + * @author fenris + */ +/*export*/ function pseudopointer_read(pseudopointer) { + if (pseudopointer.value != null) { + return pseudopointer.value; + } + else { + var message = "nullpointer dereferencation"; + throw (new Error(message)); + } +} +/** + * @author fenris + */ +/*export*/ function pseudopointer_write(pseudopointer, value) { + pseudopointer.value = value; +} +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +; +var lib_base; +(function (lib_base) { + /** + * @author fenris + */ + function environment() { + var entries = [ + { + "id": "web", + "name": "Web", + "predicate": function () { return (typeof (document) !== "undefined"); }, + }, + { + "id": "node", + "name": "Node.js", + "predicate": function () { return (typeof (process) !== "undefined"); }, + }, + { + "id": "rhino", + "name": "Rhino", + "predicate": function () { return (typeof (java) !== "undefined"); }, + }, + { + "id": "webworker", + "name": "WebWorker", + "predicate": function () { return (typeof (self["WorkerNavigator"]) !== "undefined"); } + } + ]; + var id; + var found = entries.some(function (entry) { + if (entry.predicate()) { + id = entry.id; + return true; + } + else { + return false; + } + }); + if (found) { + return id; + } + else { + throw (new Error("unknown environment")); + } + } + lib_base.environment = environment; +})(lib_base || (lib_base = {})); +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +/** + * @author fenris + */ +var instance_verbosity = 0; +/** + * @author fenris + */ +function instance_collate(value1, value2) { + if (typeof (value1) === "object") { + if (value1 == null) { + return (value2 == null); + } + else { + if ("_collate" in value1) { + return value1["_collate"](value2); + } + else { + throw (new Error("[collate]" + " " + "object has no such method")); + } + } + } + else { + if (instance_verbosity >= 1) { + lib_log.warn("[collate]" + " " + "primitive value; using default implementation"); + } + return (value1 === value2); + } +} +/** + * @author fenris + */ +function instance_compare(value1, value2) { + if (typeof (value1) === "object") { + if ("_compare" in value1) { + return value1["_compare"](value2); + } + else { + throw (new Error("[compare]" + " " + "object has no such method")); + } + } + else { + if (instance_verbosity >= 1) { + lib_log.warn("[compare]" + " " + "primitive value; using default implementation"); + } + return (value1 <= value2); + } +} +/** + * @author fenris + */ +function instance_clone(value) { + if (typeof (value) === "object") { + if ("_clone" in value) { + return value["_clone"](); + } + else { + throw (new Error("[clone]" + " " + "object has no such method")); + } + } + else { + if (instance_verbosity >= 1) { + lib_log.warn("[clone]" + " " + "primitive value; using default implementation"); + } + return value; + } +} +/** + * @desc the ability to generate a string out of the element, which identifies it to a high degree + * @author fenris + */ +function instance_hash(value) { + if (typeof (value) === "object") { + if ("_hash" in value) { + return value["_hash"](); + } + else { + throw (new Error("[hash]" + " " + "object has no such method")); + } + } + else { + if (instance_verbosity >= 1) { + lib_log.warn("[hash]" + " " + "primitive value; using default implementation"); + } + return String(value); + } +} +/** + * @desc the ability to map the element to a textual representation (most likely not injective) + * @author fenris + */ +function instance_show(value) { + if (typeof (value) === "object") { + if (value == null) { + return "NULL"; + } + else { + if ("_show" in value) { + return value["_show"](); + } + else { + // throw (new Error("[show]" + " " + "object has no such method")); + return JSON.stringify(value); + } + } + } + else { + if (instance_verbosity >= 1) { + lib_log.warn("[show]" + " " + "primitive value; using default implementation"); + } + return String(value); + } +} +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +/** + * @todo outsource to dedicated plankton-lib + */ +var lib_log; +(function (lib_log) { + /** + * @author fenris + */ + function log() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + /*window.*/ console.log.apply(console, args); + } + lib_log.log = log; + /** + * @author fenris + */ + function info() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + /*window.*/ console.info.apply(console, args); + } + lib_log.info = info; + /** + * @author fenris + */ + function warn() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + /*window.*/ console.warn.apply(console, args); + } + lib_log.warn = warn; + /** + * @author fenris + */ + function error() { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + /*window.*/ console.error.apply(console, args); + } + lib_log.error = error; +})(lib_log || (lib_log = {})); +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +/** + * @author frac + */ +var class_observer = /** @class */ (function () { + /** + * @author frac + */ + function class_observer() { + this.counter = 0; + this.actions = {}; + this.buffer = []; + } + /** + * @author frac + */ + class_observer.prototype.empty = function () { + return (Object.keys(this.actions).length == 0); + }; + /** + * @author frac + */ + class_observer.prototype.flush = function () { + this.actions = {}; + }; + /** + * @author frac + */ + class_observer.prototype.set = function (id, action) { + this.actions[id] = action; + }; + /** + * @author frac + */ + class_observer.prototype.del = function (id) { + delete this.actions[id]; + }; + /** + * @author frac + */ + class_observer.prototype.add = function (action) { + this.set((this.counter++).toString(), action); + }; + /** + * @author frac + */ + class_observer.prototype.notify = function (information, delayed) { + var _this = this; + if (information === void 0) { information = {}; } + if (delayed === void 0) { delayed = false; } + if (delayed) { + this.buffer.push(information); + } + else { + Object.keys(this.actions).forEach(function (id) { return _this.actions[id](information); }); + } + }; + /** + * @author frac + */ + class_observer.prototype.rollout = function () { + var _this = this; + this.buffer.forEach(function (information) { return _this.notify(information, false); }); + this.buffer = []; + }; + return class_observer; +}()); +/** + * @author frac + */ +/* +export interface interface_readable { + + |** + * @author frac + *| + read() : type_executor; + +} + */ +/** + * @author frac + */ +/* +export interface interface_writeable { + + |** + * @author frac + *| + write(value : type_value) : type_executor; + +} + */ +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +var lib_maybe; +(function (lib_maybe) { + /** + * @author fenris + */ + function make_nothing() { + return { + "kind": "nothing", + "parameters": {} + }; + } + lib_maybe.make_nothing = make_nothing; + /** + * @author fenris + */ + function make_just(value) { + return { + "kind": "just", + "parameters": { + "value": value + } + }; + } + lib_maybe.make_just = make_just; + /** + * @author fenris + */ + function is_nothing(maybe) { + return (maybe.kind === "nothing"); + } + lib_maybe.is_nothing = is_nothing; + /** + * @author fenris + */ + function is_just(maybe) { + return (maybe.kind === "just"); + } + lib_maybe.is_just = is_just; + /** + * @author fenris + */ + function cull(maybe) { + if (!is_just(maybe)) { + var message = "cull from nothing"; + throw (new Error(message)); + } + else { + var value = maybe.parameters["value"]; + return value; + } + } + lib_maybe.cull = cull; + /** + * @author fenris + */ + function propagate(maybe, function_) { + if (!is_just(maybe)) { + } + else { + var value = maybe.parameters["value"]; + var maybe_ = function_(value); + return maybe_; + } + } + lib_maybe.propagate = propagate; +})(lib_maybe || (lib_maybe = {})); +/** + * @author fenris + */ +/*export*/ var class_maybe = /** @class */ (function () { + function class_maybe() { + } + /** + * @desc whether the wrapper is nothing + * @author fenris + */ + class_maybe.prototype.is_nothing = function () { + throw (new Error("not implemented: class_maybe.is_nothing")); + }; + /** + * @desc whether the wrapper is just + * @author fenris + */ + class_maybe.prototype.is_just = function () { + throw (new Error("not implemented: class_maybe.is_just")); + }; + /** + * @desc return the value, stored in the maybe-wrapper + * @author fenris + */ + class_maybe.prototype.cull = function () { + throw (new Error("not implemented: class_maybe.cull")); + }; + /** + * @author fenris + */ + class_maybe.prototype.toString = function () { + throw (new Error("not implemented: class_maybe.cull")); + }; + /** + * @author fenris + */ + class_maybe.prototype.distinguish = function (action_just, action_nothing) { + if (action_nothing === void 0) { action_nothing = function () { }; } + throw (new Error("not implemented: class_maybe.distinguish")); + }; + /** + * @author fenris + */ + class_maybe.prototype.propagate = function (action) { + throw (new Error("not implemented: class_maybe.propagate")); + }; + /** + * @desc [implementation] + * @author fenris + */ + class_maybe.prototype._show = function () { + return this.toString(); + }; + return class_maybe; +}()); +/** + * @author fenris + */ +/*export*/ var class_nothing = /** @class */ (function (_super) { + __extends(class_nothing, _super); + /** + * @author fenris + */ + function class_nothing(reason) { + if (reason === void 0) { reason = null; } + var _this = _super.call(this) || this; + _this.reason = reason; + return _this; + } + /** + * @author fenris + */ + class_nothing.prototype.is_nothing = function () { + return true; + }; + /** + * @author fenris + */ + class_nothing.prototype.is_just = function () { + return false; + }; + /** + * @author fenris + */ + class_nothing.prototype.cull = function () { + var message = "you shouldn't cull a nothing-value …"; + lib_log.warn(message); + return null; + }; + /** + * @author fenris + */ + class_nothing.prototype.toString = function () { + return "<\u00B7>"; + }; + /** + * @author fenris + */ + class_nothing.prototype.reason_get = function () { + var content = ((this.reason == null) ? "·" : this.reason); + return "<- " + content + " ->"; + }; + /** + * @author fenris + */ + class_nothing.prototype.distinguish = function (action_just, action_nothing) { + if (action_nothing === void 0) { action_nothing = function () { }; } + action_nothing(this.reason); + }; + /** + * @author fenris + */ + class_nothing.prototype.propagate = function (action) { + return (new class_nothing(this.reason)); + }; + return class_nothing; +}(class_maybe)); +/** + * @author fenris + */ +/*export*/ var class_just = /** @class */ (function (_super) { + __extends(class_just, _super); + /** + * @author fenris + */ + function class_just(value) { + var _this = _super.call(this) || this; + _this.value = value; + return _this; + } + /** + * @author fenris + */ + class_just.prototype.is_nothing = function () { + return false; + }; + /** + * @author fenris + */ + class_just.prototype.is_just = function () { + return true; + }; + /** + * @author fenris + */ + class_just.prototype.cull = function () { + return this.value; + }; + /** + * @author fenris + */ + class_just.prototype.toString = function () { + var content = instance_show(this.value); + return "<+ " + content + " +>"; + }; + /** + * @author fenris + */ + class_just.prototype.distinguish = function (action_just, action_nothing) { + if (action_nothing === void 0) { action_nothing = function () { }; } + action_just(this.value); + }; + /** + * @author fenris + */ + class_just.prototype.propagate = function (action) { + return action(this.value); + }; + return class_just; +}(class_maybe)); +/* +This file is part of »bacterio-plankton:base«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:base« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:base« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:base«. If not, see . + */ +/** + * @author frac + */ +var class_error = /** @class */ (function (_super) { + __extends(class_error, _super); + /** + * @author frac + */ + function class_error(message, suberrors) { + if (suberrors === void 0) { suberrors = []; } + var _this = _super.call(this, message) || this; + _this.suberrors = suberrors; + _this.mess = message; + return _this; + } + /** + * @override + * @author frac + */ + class_error.prototype.toString = function () { + return ( /*super.toString()*/this.mess + " " + ("[" + this.suberrors.map(function (x) { return x.toString(); }).join(",") + "]")); + }; + return class_error; +}(Error)); +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +"use strict"; +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +var lib_call; +(function (lib_call) { + /** + * @desc hacked class for postfix function application + * @author fenris + */ + class class_valuewrapper { + /** + * @desc [constructor] + * @author fenris + */ + constructor(value) { + this.value = value; + } + /** + * @desc [accessor] applies a function and returns a new valuewrapper + * @author fenris + */ + pass(function_) { + return (new class_valuewrapper(function_(this.value))); + } + /** + * @desc [accessor] gives the wrapped value + * @author fenris + */ + extract() { + return this.value; + } + } + lib_call.class_valuewrapper = class_valuewrapper; + /** + * @desc shortcut for constructing a valuewrapper-object + * @author fenris + */ + function vw(value) { + return (new class_valuewrapper(value)); + } + lib_call.vw = vw; + /** + * @author fenris + */ + function use(input, function_) { + return function_(input); + } + lib_call.use = use; + /** + * @desc just the identity; useful for some callbacks etc. + * @author fenris + */ + function id(x) { + return x; + } + lib_call.id = id; + /** + * @desc composes two functions (i.e. returns a function that return the result of the successive execution of both input-functions) + * @param {function} function_f + * @param {function} function_g + * @author fenris + */ + function compose(function_f, function_g) { + return (function (x) { + // return function_g(function_f(x)); + return function_g(function_f.apply(function_f, lib_call.args2list(arguments))); + }); + } + lib_call.compose = compose; + /** + * @desc transforms a function with sequential input into a function with leveled input; example: add(2,3) = curryfy(add)(2)(3) + * @param {function} f + * @param {int} n (don't set manually) + * @return {function} the currified version of the in put function + * @author fenris + */ + function curryfy(f, n = f.length) { + switch (n) { + case 0: { + throw (new Error("[curryfy] impossible")); + // break; + } + case 1: { + return f; + // break; + } + default: { + return (function (x) { + return (curryfy(function () { return f.apply(f, [x].concat(lib_call.args2list(arguments))); }, n - 1)); + }); + // break; + } + } + } + lib_call.curryfy = curryfy; +})(lib_call || (lib_call = {})); +var lib_call; +(function (lib_call) { + /** + * @author fenris + */ + function executor_resolve(result) { + return ((resolve, reject) => resolve(result)); + } + lib_call.executor_resolve = executor_resolve; + /** + * @author fenris + */ + function executor_reject(reason) { + return ((resolve, reject) => reject(reason)); + } + lib_call.executor_reject = executor_reject; + /** + * @author fenris + */ + function executor_transform(executor, transform_result, transform_reason) { + return ((resolve, reject) => { + executor(result => resolve(transform_result(result)), reason => reject(transform_reason(reason))); + }); + } + lib_call.executor_transform = executor_transform; + /** + * @author fenris + */ + function executor_transform_default(executor, transform_result, wrap_string = null) { + let transform_reason = (error => ((wrap_string == null) ? error : new class_error(wrap_string, [error]))); + return (executor_transform(executor, transform_result, transform_reason)); + } + lib_call.executor_transform_default = executor_transform_default; + /** + * @author fenris + */ + function executor_compose_sequential(first, second) { + return ((resolve, reject) => { + first(result => { + second(result)(resolve, reject); + }, reason => { + reject(reason); + }); + }); + } + lib_call.executor_compose_sequential = executor_compose_sequential; + /** + * @author fenris + */ + function executor_chain(state, executors) { + return ((resolve, reject) => { + if (executors.length == 0) { + return resolve(state); + } + else { + return executors[0](state)(result => { + executor_chain(result, executors.slice(1))(resolve, reject); + }, reject); + } + }); + /* + */ + /* + if (executors.length == 0) { + return executor_resolve(state); + } + else if (executors.length == 1) { + return executors[0](state); + } + else { + return ( + executor_chain( + state, + [ + state => (resolve, reject) => executors[0](state)(result => executors[1](result)(resolve, reject), reject) + ].concat(executors.slice(2)) + ) + ); + } + */ + /* + return ( + executors.reduce( + (chain, current) => executor_compose_sequential(chain, current, deferred), + executor_resolve(state) + ) + ); + */ + } + lib_call.executor_chain = executor_chain; + /** + * @author fenris + */ + function executor_first(executors) { + /* + return ( + (resolve, reject) => { + if (executors.length == 0) { + reject(new Error("all failed")); + } + else { + executors[0]( + result => { + resolve(result); + }, + reason => { + executor_first(executors.slice(1))(resolve, reject); + } + ) + } + } + ); + */ + return ((resolve, reject) => { + executor_chain([], executors.map(executor => reasons => (resolve_, reject_) => { + executor(result => reject_(result), reason => resolve_(reasons.concat([reason]))); + }))(errors => reject(errors), result => resolve(result)); + }); + } + lib_call.executor_first = executor_first; + /** + * @author fenris + */ + function executor_condense(executors) { + return (executor_chain([], executors.map(executor => result => (resolve, reject) => { + executor(element => resolve(result.concat([element])), reject); + }))); + } + lib_call.executor_condense = executor_condense; + /** + * @author fenris + * @deprecated use condense + */ + function executor_filter(executors, predicate) { + return (executor_chain([], executors.map(executor => result => (resolve, reject) => { + executor(element => resolve(predicate(element) ? result.concat([element]) : result), reject); + }))); + } + lib_call.executor_filter = executor_filter; + /** + * @author fenris + * @deprecated use condense + */ + function executor_map(executors, transformator) { + return (executor_chain([], executors.map(executor => result => (resolve, reject) => { + executor(element1 => resolve(result.concat([transformator(element1)])), reject); + }))); + } + lib_call.executor_map = executor_map; + /** + * @author fenris + * @deprecated use condense + */ + function executor_reduce(executors, initial, accumulator) { + return (executor_chain(initial, executors.map(executor => result => (resolve, reject) => { + executor(element => resolve(accumulator(result, element)), reject); + }))); + } + lib_call.executor_reduce = executor_reduce; +})(lib_call || (lib_call = {})); +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +var lib_call; +(function (lib_call) { + /** + * @author fenris + */ + function promise_reject(reason) { + return Promise.reject(reason); + } + lib_call.promise_reject = promise_reject; + /** + * @author fenris + */ + function promise_resolve(result) { + return Promise.resolve(result); + } + lib_call.promise_resolve = promise_resolve; + /** + * @author fenris + */ + function promise_make(executor) { + return (new Promise(executor)); + } + lib_call.promise_make = promise_make; + /** + * @author fenris + */ + function promise_then_close(promise, resolver, rejector) { + promise.then(resolver, rejector); + } + lib_call.promise_then_close = promise_then_close; + /** + * @author fenris + */ + function promise_then_append(promise, resolver, rejector = null) { + if (rejector == null) { + rejector = (reason) => promise_reject(reason); + } + return (promise.then(resolver, rejector)); + } + lib_call.promise_then_append = promise_then_append; + /** + * @author fenris + */ + function promise_all(promises) { + return Promise.all(promises); + } + lib_call.promise_all = promise_all; + /** + * @author fenris + */ + function promise_chain(promises, start = undefined) { + return (promises.reduce((chain, promise) => promise_then_append(chain, promise), promise_resolve(start))); + } + lib_call.promise_chain = promise_chain; + /** + * @author fenris + */ + function promise_condense(promises) { + return (promise_chain(promises.map(promise => result => promise_then_append(promise(), element => promise_resolve(result.concat([element])))), [])); + } + lib_call.promise_condense = promise_condense; + /** + * @author fenris + */ + function promise_group(promises, serial = false) { + const decorate = function (promise, name) { + return (() => promise_then_append(promise(), value => promise_resolve({ "key": name, "value": value }))); + }; + const convert = function (array) { + let object = {}; + array.forEach(({ "key": key, "value": value }) => { object[key] = value; }); + return object; + }; + if (serial) { + return (promise_then_append(promise_condense(Object.keys(promises) + .map(name => decorate(promises[name], name))), list => promise_resolve(convert(list)))); + } + else { + return (promise_then_append(promise_all(Object.keys(promises) + .map(name => decorate(promises[name], name)) + .map(promise => promise())), list => promise_resolve(convert(list)))); + } + } + lib_call.promise_group = promise_group; + /** + * @author fenris + */ + function promise_wrap(promise, transformator_result, transformator_reason = lib_call.id) { + return (promise_make((resolve, reject) => { + promise_then_close(promise, result => resolve(transformator_result(result)), reason => reject(transformator_reason(reason))); + })); + } + lib_call.promise_wrap = promise_wrap; + /** + * @author fenris + */ + function promise_show(label) { + return (result => promise_make((resolve, reject) => { + lib_log.info(label + ": " + instance_show(result)); + resolve(result); + })); + } + lib_call.promise_show = promise_show; + /** + * @author fenris + */ + function promise_log(result) { + return promise_show("log"); + } + lib_call.promise_log = promise_log; + /** + * @author fenris + */ + function promise_attach(state, promise, name) { + return (promise_wrap(promise, result => { + state[name] = result; + return state; + })); + } + lib_call.promise_attach = promise_attach; + /** + * @author fenris + */ + function promise_delay(promise, delay) { + return promise_make((resolve, reject) => { + lib_call.timeout(() => { + promise_then_close(promise, resolve, reject); + return null; + }, delay); + }); + } + lib_call.promise_delay = promise_delay; + /** + * @author fenris + */ + function promise_to_executor(promise) { + return ((resolve, reject) => promise.then(resolve, reject)); + } + lib_call.promise_to_executor = promise_to_executor; +})(lib_call || (lib_call = {})); +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +var lib_call; +(function (lib_call) { + lib_call.initializer_state_initial = 0; + lib_call.initializer_state_waiting = 1; + lib_call.initializer_state_successful = 2; + lib_call.initializer_state_failed = 3; + /** + * @author fenris + */ + function initializer_make(fetcher) { + let subject = { + "fetcher": fetcher, + "state": lib_call.initializer_state_initial, + "queue": [], + "result": undefined, + "reason": undefined, + }; + return subject; + } + lib_call.initializer_make = initializer_make; + /** + * @author fenris + */ + function initializer_actuate(subject) { + switch (subject.state) { + case lib_call.initializer_state_successful: { + subject.queue.forEach(entry => entry.resolve(subject.result)); + break; + } + case lib_call.initializer_state_failed: { + subject.queue.forEach(entry => entry.reject(subject.reason)); + break; + } + default: { + let message = `unhandled state ${subject.state}`; + throw (new Error(message)); + break; + } + } + } + /** + * @author fenris + */ + function initializer_reset(subject) { + subject.state = lib_call.initializer_state_initial; + subject.queue = []; + } + lib_call.initializer_reset = initializer_reset; + /** + * @author fenris + */ + function initializer_state(subject) { + return subject.state; + } + lib_call.initializer_state = initializer_state; + /** + * @author fenris + */ + function initializer_get(subject) { + switch (subject.state) { + case lib_call.initializer_state_initial: { + subject.state = lib_call.initializer_state_waiting; + return (lib_call.promise_make((resolve, reject) => { + subject.queue.push({ "resolve": resolve, "reject": reject }); + subject.fetcher().then(result => { + subject.state = lib_call.initializer_state_successful; + subject.result = result; + initializer_actuate(subject); + }, reason => { + subject.state = lib_call.initializer_state_failed; + subject.reason = reason; + initializer_actuate(subject); + }); + })); + break; + } + case lib_call.initializer_state_waiting: { + return (lib_call.promise_make((resolve, reject) => { + subject.queue.push({ "resolve": resolve, "reject": reject }); + })); + break; + } + case lib_call.initializer_state_successful: { + return (lib_call.promise_resolve(subject.result)); + break; + } + case lib_call.initializer_state_failed: { + return (lib_call.promise_reject(subject.reason)); + break; + } + default: { + let message = `unhandled state ${subject.state}`; + throw (new Error(message)); + break; + } + } + } + lib_call.initializer_get = initializer_get; + /** + * @author fenris + */ + function initializer_get_sync(subject) { + switch (subject.state) { + case lib_call.initializer_state_successful: { + return subject.result; + break; + } + case lib_call.initializer_state_failed: { + throw subject.reason; + break; + } + default: { + let message = `unhandled state ${subject.state}`; + throw (new Error(message)); + break; + } + } + } + /** + * @author fenris + */ + function initializer_set_sync(subject, result) { + switch (subject.state) { + case lib_call.initializer_state_successful: { + subject.result = result; + break; + } + case lib_call.initializer_state_failed: { + subject.state = lib_call.initializer_state_successful; + subject.result = result; + break; + } + default: { + let message = `unhandled state ${subject.state}`; + throw (new Error(message)); + break; + } + } + } +})(lib_call || (lib_call = {})); +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +var lib_call; +(function (lib_call) { + /* + The core idea of this library is to provide means for asynchronous program flow. The old-school way to do is, + is to use callbacks. While this approach is simple and easy to understand, it has some disadvantages. As an + attempt to relief and improve this, the promise-system was introduced. In principle it solves most of the + problems found in the callback-approach; however it has some downsides as well: + + - Convolution of multiple principles + Promises unite the ideas of asynchronous program flow and error handling. + + - Instant execution + Creating a promise results in the instant execution of the given executor prodecure. While this might be + convenient in some cases, it can be quite disturbing and counter-intuitive in others. + + - Broken typing + The Promise system doesn't distinguish between an appending "then" (i.e. passing a function, which returns a + new promise) and a closing "then" (i.e. passing a function, which has no return value). On top of that it + allows returning simple values in an appending "then", which results in an implicit call of the executors + "resolve"-function. The price for these "pragmatic" features is that the whole system can't be typed well. + And even though JavaScript is not a strictly typed language, it was a quite questionable decision to design + the promise system in a way, which breaks typing from the start. + + The deferral-system forseeks to solve these issues while retaining the advantages of the promise-system. + */ + /** + * @author fenris + * @desc activates the deferral and handles its output according to a given procedure + * @param {(value : type_value)=>void} procedure a function which receives the output of the deferral as argument + */ + function deferral_use(deferral, input, procedure) { + deferral.representation(input).then(value => { + procedure(value); + }, reason => { + throw reason; + }); + } + lib_call.deferral_use = deferral_use; + /** + * @author fenris + * @desc creates a deferral-subject (similar to "new Promise", where "convey" reflects "resolve"/"reject") + */ + function deferral_make(handler) { + return ({ + "representation": ((input) => (new Promise((resolve, reject) => { + handler(input, resolve); + }))) + }); + } + lib_call.deferral_make = deferral_make; + /** + * @author fenris + * @desc wraps a simple function into a deferral (similar to "Promise.resolve"/"Promise.reject") + */ + function deferral_wrap(function_) { + return (deferral_make((input, convey) => convey(function_(input)))); + } + lib_call.deferral_wrap = deferral_wrap; + /** + * @author fenris + */ + function deferral_id() { + return (deferral_make((input, convey) => convey(input))); + } + lib_call.deferral_id = deferral_id; + /** + * @author fenris + */ + function deferral_const(value) { + return (deferral_make((input, convey) => convey(value))); + } + lib_call.deferral_const = deferral_const; + /** + * @author fenris + */ + function deferral_delay(output, delay) { + return (deferral_make((input, convey) => { + setTimeout(() => convey(output), delay); + })); + } + lib_call.deferral_delay = deferral_delay; + /** + * @author fenris + * @desc connects two deferrals to form a new one; the output of the first is taken as input for the second + * (similar to "Promise.then" when passing a function which returns a new promise) + * @param {type_deferral} first a simple deferral + * @param {(value1 : type_value1)=>type_deferral} second a function depending from a value returning a deferral + */ + function deferral_compose_serial(first, second) { + return { + "representation": ((input) => first.representation(input).then((between) => second.representation(between))) + }; + } + lib_call.deferral_compose_serial = deferral_compose_serial; + /** + * @author fenris + */ + function deferral_compose_parallel({ "left": deferral_left, "right": deferral_right, }) { + return (deferral_make((input, convey) => { + let object = { + "left": lib_maybe.make_nothing(), + "right": lib_maybe.make_nothing(), + }; + let finish = function () { + if (lib_maybe.is_just(object.left) + && + lib_maybe.is_just(object.right)) { + let result = { + "left": lib_maybe.cull(object.left), + "right": lib_maybe.cull(object.right), + }; + convey(result); + } + else { + // do nothing + } + }; + deferral_use(deferral_left, input, output_left => { + object.left = lib_maybe.make_just(output_left); + finish(); + }); + deferral_use(deferral_right, input, output_right => { + object.right = lib_maybe.make_just(output_right); + finish(); + }); + })); + } + lib_call.deferral_compose_parallel = deferral_compose_parallel; + /** + * @author fenris + * @desc repeatedly applied serial composition + */ + function deferral_chain(members) { + return (members.reduce( + // (result, current) => deferral_compose_serial(result, current), + deferral_compose_serial, deferral_id())); + } + lib_call.deferral_chain = deferral_chain; + /** + * @author fenris + */ + /* + export function deferral_bunch( + members : {[name : string] : type_deferral} + ) : type_deferral { + + } + */ +})(lib_call || (lib_call = {})); +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +var lib_call; +(function (lib_call) { + /** + * @author fenris + */ + class class_deferral { + /** + * @author fenris + */ + constructor(subject) { + this.subject = subject; + } + /** + * @author fenris + */ + static _cram(subject) { + return (new class_deferral(subject)); + } + /** + * @author fenris + */ + static _tear(instance) { + return instance.subject; + } + /** + * @author fenris + */ + static make(handler) { + return (class_deferral._cram(lib_call.deferral_make(handler))); + } + /** + * @author fenris + */ + use(input, procedure) { + return (lib_call.deferral_use(class_deferral._tear(this), input, procedure)); + } + /** + * @author fenris + */ + compose_serial(second) { + return (class_deferral._cram(lib_call.deferral_compose_serial(class_deferral._tear(this), class_deferral._tear(second)))); + } + /** + * @author fenris + */ + static chain(members) { + return (class_deferral._cram(lib_call.deferral_chain(members.map(member => class_deferral._tear(member))))); + } + /** + * @author fenris + */ + static wrap(function_) { + return (class_deferral._cram(lib_call.deferral_wrap(function_))); + } + /** + * @author fenris + */ + static const_(value) { + return (class_deferral._cram(lib_call.deferral_const(value))); + } + /** + * @author fenris + */ + static delay(output, delay) { + return (class_deferral._cram(lib_call.deferral_delay(output, delay))); + } + } + lib_call.class_deferral = class_deferral; +})(lib_call || (lib_call = {})); +/* +This file is part of »bacterio-plankton:call«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:call« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:call« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:call«. If not, see . + */ +var lib_call; +(function (lib_call) { + /** + * @author fenris + */ + function timeout(function_, delay) { + return ( + /*window.*/ setTimeout(function_, delay)); + } + lib_call.timeout = timeout; + /** + * @desc a definition for a value being "defined" + * @author neuc + */ + function is_def(obj, null_is_valid = false) { + return (!((typeof (obj) === "undefined") + || + (!null_is_valid && (obj === null)))); + } + lib_call.is_def = is_def; + /** + * @desc returns the value if set and, when a type is specified, if the type is correct, if not return default_value + * @author neuc + */ + function def_val(value, default_value, type = null, null_is_valid = false) { + if (is_def(value, null_is_valid) + && + (is_def(type) + ? ((typeof value === type) + || + ((value === null) + && + null_is_valid)) + : true)) { + return value; + } + else { + return default_value; + } + } + lib_call.def_val = def_val; + ; + /** + * @desc just the empty function; useful for some callbacks etc. + * @author fenris + */ + function nothing() { + } + lib_call.nothing = nothing; + /** + * @desc outputs + * @author fenris + */ + function output(...args) { + lib_log.info.apply(lib_log, args); + } + lib_call.output = output; + /** + * @desc converts the "arguments"-map into an array + * @param {Object} args + * @author fenris + */ + function args2list(args) { + return Object.keys(args).map(key => args[key]); + } + lib_call.args2list = args2list; + /** + * @desc provides the call for an attribute of a class as a regular function + * @param {string} name the name of the attribute + * @return {*} + * @author fenris + */ + function attribute(name) { + return ((object) => object[name]); + } + lib_call.attribute = attribute; + /** + * @desc provides a method of a class as a regular function + * @param {string} name the name of the method + * @return {function} + * @author fenris + */ + function method(name) { + return (function (object) { return object[name].apply(object, args2list(arguments).slice(1)); }); + } + lib_call.method = method; + /** + * @author fenris + */ + function distinguish(unival, handlers, fallback = null) { + if (unival.kind in handlers) { + let handler = handlers[unival.kind]; + return handler(unival.data); + } + else { + let message = ("unhandled kind '" + unival.kind + "'"); + if (fallback !== null) { + console.warn(message); + return fallback(unival); + } + else { + throw (new Error(message)); + } + } + } + lib_call.distinguish = distinguish; +})(lib_call || (lib_call = {})); +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + var enum_level; + (function (enum_level) { + enum_level[enum_level["debug"] = 0] = "debug"; + enum_level[enum_level["info"] = 1] = "info"; + enum_level[enum_level["notice"] = 2] = "notice"; + enum_level[enum_level["warning"] = 3] = "warning"; + enum_level[enum_level["error"] = 4] = "error"; + })(enum_level = log.enum_level || (log.enum_level = {})); + ; + /** + */ + function level_order(level1, level2) { + return (level1 <= level2); + } + log.level_order = level_order; + /** + */ + function level_show(level) { + switch (level) { + case enum_level.debug: return "debug"; + case enum_level.info: return "info"; + case enum_level.notice: return "notice"; + case enum_level.warning: return "warning"; + case enum_level.error: return "error"; + default: return "(unknown)"; + } + } + log.level_show = level_show; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +/** + * @deprecated + * @todo remove + */ +var lib_log; +(function (lib_log) { + /** + * @author fenris + */ + /*export*/ var level_stack = [0]; + function level_push(level) { level_stack.push(level); } + lib_log.level_push = level_push; + function level_pop() { if (level_stack.length > 1) { + level_stack.pop(); + } } + lib_log.level_pop = level_pop; + function level_get() { return level_stack.slice(-1)[0]; } + /* + export function level_inc() : void {level_push(level_get()+1);} + export function level_dec() : void {level_push(level_get()-1);} + */ + /** + * @author fenris + */ + var indent_stack = [0]; + function indent_push(indent) { indent_stack.push(indent); } + lib_log.indent_push = indent_push; + function indent_pop() { if (indent_stack.length > 1) { + indent_stack.pop(); + } } + lib_log.indent_pop = indent_pop; + function indent_get() { return level_stack.slice(-1)[0]; } + function indent_inc() { level_push(level_get() + 1); } + lib_log.indent_inc = indent_inc; + function indent_dec() { level_push(level_get() - 1); } + lib_log.indent_dec = indent_dec; + /** + * @author fenris + */ + function write(_a) { + var message = _a["message"], _b = _a["type"], type = _b === void 0 ? null : _b, _c = _a["prefix"], prefix = _c === void 0 ? null : _c, _d = _a["level"], level = _d === void 0 ? 0 : _d, _e = _a["indent"], indent = _e === void 0 ? 0 : _e; + var entry = { + "level": ((type === null) + ? lib_plankton.log.enum_level.info + : { + "debug": lib_plankton.log.enum_level.debug, + "info": lib_plankton.log.enum_level.info, + "notice": lib_plankton.log.enum_level.notice, + "warning": lib_plankton.log.enum_level.warning, + "error": lib_plankton.log.enum_level.error + }[type]), + "incident": message, + "details": { + "prefix": prefix, + "level": level, + "indent": indent + } + }; + lib_plankton.log.add(entry); + } + lib_log.write = write; +})(lib_log || (lib_log = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + var class_channel = /** @class */ (function () { + function class_channel() { + } + return class_channel; + }()); + log.class_channel = class_channel; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + var class_channel_console = /** @class */ (function (_super) { + __extends(class_channel_console, _super); + function class_channel_console() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + */ + class_channel_console.prototype.add = function (entry) { + console.log(("<" + (new Date(Date.now())).toISOString().slice(0, 19) + ">") + + + " " + + + ("[" + log.level_show(entry.level) + "]") + + + " " + + + ("" + entry.incident + "") + + + ": " + + + JSON.stringify(entry.details, undefined, " ")); + }; + return class_channel_console; + }(log.class_channel)); + log.class_channel_console = class_channel_console; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + var class_channel_notify = /** @class */ (function (_super) { + __extends(class_channel_notify, _super); + function class_channel_notify() { + return _super !== null && _super.apply(this, arguments) || this; + } + /** + */ + class_channel_notify.prototype.add = function (entry) { + var nm_child_process = require("child_process"); + var command = ("notify-send" + + + " " + + + ("'" + + + ("[" + log.level_show(entry.level) + "]") + + + " " + + + entry.incident + + + "'") + + + " " + + + ("'" + + + (Object.keys(entry.details) + .map(function (key) { return (key + ": " + JSON.stringify(entry.details[key])); }) + .join("\n")) + + + "'")); + nm_child_process.exec(command, function (error, stdout, stderr) { + // do noting + }); + }; + return class_channel_notify; + }(log.class_channel)); + log.class_channel_notify = class_channel_notify; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + var class_channel_minlevel = /** @class */ (function (_super) { + __extends(class_channel_minlevel, _super); + /** + */ + function class_channel_minlevel(core, threshold) { + var _this = _super.call(this) || this; + _this.core = core; + _this.threshold = threshold; + return _this; + } + /** + */ + class_channel_minlevel.prototype.add = function (entry) { + if (log.level_order(this.threshold, entry.level)) { + this.core.add(entry); + } + }; + return class_channel_minlevel; + }(log.class_channel)); + log.class_channel_minlevel = class_channel_minlevel; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + function translate_level(level_string) { + return { + "debug": log.enum_level.debug, + "info": log.enum_level.info, + "notice": log.enum_level.notice, + "warning": log.enum_level.warning, + "error": log.enum_level.error + }[level_string]; + } + /** + */ + function channel_make(description) { + var _a, _b; + switch (description.kind) { + default: { + throw (new Error("unhandled log channel kind: " + description.kind)); + break; + } + case "console": { + return (new log.class_channel_minlevel(new log.class_channel_console(), translate_level((_a = description.data["threshold"]) !== null && _a !== void 0 ? _a : "debug"))); + break; + } + case "notify": { + return (new log.class_channel_minlevel(new log.class_channel_notify(), translate_level((_b = description.data["threshold"]) !== null && _b !== void 0 ? _b : "debug"))); + break; + } + } + } + log.channel_make = channel_make; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:log«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:log« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var log; + (function (log) { + /** + */ + var _channel_stack = null; + /** + */ + function conf_default() { + return [ + new log.class_channel_minlevel(new log.class_channel_console(), log.enum_level.notice), + new log.class_channel_minlevel(new log.class_channel_notify(), log.enum_level.error), + ]; + } + log.conf_default = conf_default; + /** + */ + function conf_push(channels) { + if (_channel_stack === null) { + _channel_stack = []; + } + _channel_stack.push(channels); + } + log.conf_push = conf_push; + /** + */ + function conf_pop() { + if (_channel_stack.length > 0) { + _channel_stack.pop(); + } + else { + // do nothing + } + } + log.conf_pop = conf_pop; + /** + */ + function setup() { + if (_channel_stack === null) { + _channel_stack = []; + conf_push(conf_default()); + } + else { + // do nothing + } + } + log.setup = setup; + /** + */ + function add(entry) { + setup(); + _channel_stack.slice(-1)[0].forEach(function (channel) { return channel.add(entry); }); + } + log.add = add; + /** + */ + function debug(incident, details) { + if (details === void 0) { details = {}; } + add({ "level": log.enum_level.debug, "incident": incident, "details": details }); + } + log.debug = debug; + /** + */ + function info(incident, details) { + if (details === void 0) { details = {}; } + add({ "level": log.enum_level.info, "incident": incident, "details": details }); + } + log.info = info; + /** + */ + function notice(incident, details) { + if (details === void 0) { details = {}; } + add({ "level": log.enum_level.notice, "incident": incident, "details": details }); + } + log.notice = notice; + /** + */ + function warning(incident, details) { + if (details === void 0) { details = {}; } + add({ "level": log.enum_level.warning, "incident": incident, "details": details }); + } + log.warning = warning; + /** + */ + function error(incident, details) { + if (details === void 0) { details = {}; } + add({ "level": log.enum_level.error, "incident": incident, "details": details }); + } + log.error = error; + })(log = lib_plankton.log || (lib_plankton.log = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:args«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:args« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:args« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:args«. If not, see . + */ +var lib_args; +(function (lib_args) { + /** + */ + var enum_environment; + (function (enum_environment) { + enum_environment["cli"] = "cli"; + enum_environment["url"] = "url"; + })(enum_environment = lib_args.enum_environment || (lib_args.enum_environment = {})); + ; + /** + */ + var enum_kind; + (function (enum_kind) { + enum_kind["positional"] = "positional"; + enum_kind["volatile"] = "volatile"; + })(enum_kind = lib_args.enum_kind || (lib_args.enum_kind = {})); + ; + /** + */ + var enum_type; + (function (enum_type) { + enum_type["boolean"] = "boolean"; + enum_type["integer"] = "int"; + enum_type["float"] = "float"; + enum_type["string"] = "string"; + })(enum_type = lib_args.enum_type || (lib_args.enum_type = {})); + ; + /** + */ + var enum_mode; + (function (enum_mode) { + enum_mode["replace"] = "replace"; + enum_mode["accumulate"] = "accumulate"; + })(enum_mode = lib_args.enum_mode || (lib_args.enum_mode = {})); + ; +})(lib_args || (lib_args = {})); +/* +This file is part of »bacterio-plankton:args«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:args« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:args« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:args«. If not, see . + */ +var lib_args; +(function (lib_args) { + /** + * @author fenris + */ + var class_argument = /** @class */ (function () { + /** + * @author fenris + */ + function class_argument(_a) { + var name = _a["name"], _b = _a["type"], type = _b === void 0 ? lib_args.enum_type.string : _b, _c = _a["kind"], kind = _c === void 0 ? lib_args.enum_kind.positional : _c, _d = _a["mode"], mode = _d === void 0 ? lib_args.enum_mode.replace : _d, _e = _a["default"], default_ = _e === void 0 ? null : _e, _f = _a["info"], info = _f === void 0 ? null : _f, _g = _a["parameters"], parameters = _g === void 0 ? {} : _g, _h = _a["hidden"], hidden = _h === void 0 ? false : _h; + this.name = name; + this.type = type; + this.kind = kind; + this.mode = mode; + this.default_ = default_; + this.info = info; + this.parameters = parameters; + this.hidden = hidden; + if (!this.check()) { + throw (new Error("invalid argument-setup")); + } + } + /** + * @author fenris + */ + class_argument.positional = function (_a) { + var name = _a["name"], _b = _a["type"], type = _b === void 0 ? lib_args.enum_type.string : _b, _c = _a["mode"], mode = _c === void 0 ? lib_args.enum_mode.replace : _c, _d = _a["default"], default_ = _d === void 0 ? null : _d, _e = _a["info"], info = _e === void 0 ? null : _e, _f = _a["hidden"], hidden = _f === void 0 ? false : _f, index = _a["index"]; + return (new class_argument({ + "name": name, + "kind": lib_args.enum_kind.positional, + "type": type, + "mode": mode, + "default": default_, + "info": info, + "hidden": hidden, + "parameters": { + "index": index + } + })); + }; + /** + * @author fenris + */ + class_argument.volatile = function (_a) { + var name = _a["name"], _b = _a["type"], type = _b === void 0 ? lib_args.enum_type.string : _b, _c = _a["mode"], mode = _c === void 0 ? lib_args.enum_mode.replace : _c, _d = _a["default"], default_ = _d === void 0 ? null : _d, _e = _a["info"], info = _e === void 0 ? null : _e, _f = _a["hidden"], hidden = _f === void 0 ? false : _f, indicators_short = _a["indicators_short"], indicators_long = _a["indicators_long"]; + return (new class_argument({ + "name": name, + "kind": lib_args.enum_kind.volatile, + "type": type, + "mode": mode, + "default": default_, + "info": info, + "hidden": hidden, + "parameters": { + "indicators_short": indicators_short, + "indicators_long": indicators_long + } + })); + }; + /** + * @author fenris + */ + class_argument.prototype.check = function () { + var _this = this; + return [ + function () { return ((!(_this.kind == lib_args.enum_kind.volatile)) + || + (("indicators_long" in _this.parameters) + && + (_this.parameters["indicators_long"]["length"] >= 0))); }, + ].every(function (condition) { return condition(); }); + }; + /** + * @author fenris + */ + class_argument.prototype.name_get = function () { + return this.name; + }; + /** + * @author fenris + */ + class_argument.prototype.kind_get = function () { + return this.kind; + }; + /** + * @author fenris + */ + class_argument.prototype.type_get = function () { + return this.type; + }; + /** + * @author fenris + */ + class_argument.prototype.mode_get = function () { + return this.mode; + }; + /** + * @author fenris + */ + class_argument.prototype.default_get = function () { + return this.default_; + }; + /** + * @author fenris + */ + class_argument.prototype.parameters_get = function () { + return this.parameters; + }; + /** + * @author fenris + */ + class_argument.prototype.hidden_get = function () { + return this.hidden; + }; + /** + * @author fenris + */ + class_argument.prototype.toString = function () { + return "<" + this.name + ">"; + }; + /** + * @author fenris + */ + class_argument.prototype.indicator_main = function () { + if (this.kind === lib_args.enum_kind.volatile) { + return this.parameters["indicators_long"][0]; + } + else { + return null; + } + }; + /** + * @author fenris + */ + class_argument.prototype.pattern_value = function () { + switch (this.type) { + case lib_args.enum_type.boolean: { + return "false|true"; + break; + } + case lib_args.enum_type.integer: { + return "[0-9]+"; + break; + } + case lib_args.enum_type.float: { + return "\\d*(?:\\.\\d+)?"; + break; + } + case lib_args.enum_type.string: { + return "\\S+"; + break; + } + default: { + throw (new Error("unhandled type " + this.type)); + break; + } + } + }; + /** + * @author fenris + */ + class_argument.prototype.extract = function (raw) { + switch (this.type) { + case lib_args.enum_type.boolean: { + return (raw != "false"); + break; + } + case lib_args.enum_type.integer: { + return parseInt(raw); + break; + } + case lib_args.enum_type.float: { + return parseFloat(raw); + break; + } + case lib_args.enum_type.string: { + return raw; + break; + } + default: { + throw (new Error("unhandled type " + this.type)); + break; + } + } + }; + /** + * @author fenris + */ + class_argument.prototype.assign = function (data, target, raw) { + var value = this.extract(raw); + switch (this.mode) { + case lib_args.enum_mode.replace: { + data[target] = value; + break; + } + case lib_args.enum_mode.accumulate: { + /* + if (! (this.name in data)) { + data[this.name] = []; + } + */ + data[target].push(value); + break; + } + default: { + throw (new Error("unhandled mode " + this.mode)); + } + } + }; + /** + * @author fenris + */ + class_argument.prototype.make = function (data, target) { + var value = data[target]; + return value.toString(); + }; + /** + * @author fenris + */ + class_argument.prototype.generate_help = function () { + var _this = this; + var _a, _b, _c, _d; + var output = ""; + { + switch (this.kind) { + case lib_args.enum_kind.positional: { + var line = ""; + line += "\t"; + line += "<" + this.name + ">"; + line += "\n"; + output += line; + } + case lib_args.enum_kind.volatile: { + var line = ""; + line += "\t"; + if (this.type === lib_args.enum_type.boolean) { + line += ([] + .concat(((_a = this.parameters["indicators_short"]) !== null && _a !== void 0 ? _a : []).map(function (indicator) { return ("-" + indicator); })) + .concat(((_b = this.parameters["indicators_long"]) !== null && _b !== void 0 ? _b : []).map(function (indicator) { return ("--" + indicator); })) + .join(" | ")); + } + else { + line += ([] + .concat(((_c = this.parameters["indicators_short"]) !== null && _c !== void 0 ? _c : []).map(function (indicator) { return ("-" + indicator + " " + ("<" + _this.name + ">")); })) + .concat(((_d = this.parameters["indicators_long"]) !== null && _d !== void 0 ? _d : []).map(function (indicator) { return ("--" + indicator + "=" + ("<" + _this.name + ">")); })) + .join(" | ")); + } + line += "\n"; + output += line; + } + } + } + { + var line = ""; + line += "\t\t"; + var infotext = ((this.info == null) ? "(no info available)" : this.info); + line += infotext; + if ((this.type != "boolean") && (this.default_ != null)) { + line += "; default: " + this.default_.toString(); + } + line += "\n"; + output += line; + } + return output; + }; + return class_argument; + }()); + lib_args.class_argument = class_argument; +})(lib_args || (lib_args = {})); +/* +This file is part of »bacterio-plankton:args«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:args« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:args« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:args«. If not, see . + */ +var lib_args; +(function (lib_args) { + /** + * @author fenris + */ + var settings = { + "environment": { + "cli": { + "symbols": { + "delimiter": " ", + "prefix": "--", + "assignment": "=" + } + }, + "url": { + "symbols": { + "delimiter": "&", + "prefix": "", + "assignment": "=" + } + } + } + }; + /** + * @author fenris + */ + lib_args.verbosity = 0; + /** + * @author fenris + * @todo check validity + */ + var class_handler = /** @class */ (function () { + /** + * @author fenris + */ + function class_handler(arguments_) { + this.arguments_ = arguments_; + } + /** + * @author fenris + */ + class_handler.prototype.filter = function (kind) { + var arguments_ = {}; + for (var _i = 0, _a = Object.entries(this.arguments_); _i < _a.length; _i++) { + var _b = _a[_i], name = _b[0], argument = _b[1]; + if (argument.kind_get() == kind) { + arguments_[name] = argument; + } + } + return arguments_; + }; + /** + * @author fenris + */ + class_handler.prototype.read = function (environment, input, data) { + var _this = this; + if (data === void 0) { data = {}; } + switch (environment) { + case lib_args.enum_environment.cli: + case lib_args.enum_environment.url: { + // default values + { + for (var _i = 0, _a = Object.entries(this.arguments_); _i < _a.length; _i++) { + var _b = _a[_i], name = _b[0], argument = _b[1]; + data[name] = argument.default_get(); + } + } + // preprocessing + { + // short indicators (lil hacky ...) + { + if (environment == lib_args.enum_environment.cli) { + for (var _c = 0, _d = Object.entries(this.filter(lib_args.enum_kind.volatile)); _c < _d.length; _c++) { + var _e = _d[_c], name = _e[0], argument = _e[1]; + // console.info(argument.parameters_get()["indicators_short"].join("|")); + var pattern_from = ""; + { + pattern_from += "(?:^|" + settings["environment"][environment]["symbols"]["delimiter"] + ")"; + pattern_from += "-" + argument.parameters_get()["indicators_short"].join("|"); + pattern_from += "(?:$|" + settings["environment"][environment]["symbols"]["delimiter"] + ")"; + } + var pattern_to = ""; + { + pattern_to += settings["environment"][environment]["symbols"]["delimiter"]; + pattern_to += settings["environment"][environment]["symbols"]["prefix"]; + pattern_to += argument.indicator_main(); + if (argument.type_get() == lib_args.enum_type.boolean) { + pattern_to += settings["environment"][environment]["symbols"]["delimiter"]; + } + else { + pattern_to += settings["environment"][environment]["symbols"]["assignment"]; + } + } + var result = input.replace(new RegExp(pattern_from, "g"), pattern_to); + lib_plankton.log.debug("lib_args:read:replacing", { + "pattern_from": pattern_from, + "pattern_to": pattern_to, + "input": input, + "result": result + }); + input = result; + } + } + } + lib_plankton.log.debug("lib_args:read:current_input", { + "input": input + }); + } + // parsing + { + var parts = input + .split(settings["environment"][environment]["symbols"]["delimiter"]) + .filter(function (x) { return (x != ""); }); + var index_expected_1 = 0; + parts.forEach(function (part) { + lib_plankton.log.debug("lib_args:read:analyzing", { + "part": part + }); + var found = [ + function () { + lib_plankton.log.debug("lib_args:read:probing_as_volatile", { + "part": part + }); + for (var _i = 0, _a = Object.entries(_this.filter(lib_args.enum_kind.volatile)); _i < _a.length; _i++) { + var _b = _a[_i], name = _b[0], argument = _b[1]; + lib_plankton.log.debug("lib_args:read:probing_as_volatile:trying", { + "part": part, + "argument": argument.toString() + }); + var pattern = ""; + { + var pattern_front = ""; + pattern_front += "" + settings["environment"][environment]["symbols"]["prefix"]; + pattern_front += "(?:" + argument.parameters_get()["indicators_long"].join("|") + ")"; + pattern += pattern_front; + } + { + var pattern_back = ""; + pattern_back += "" + settings["environment"][environment]["symbols"]["assignment"]; + pattern_back += "(" + argument.pattern_value() + ")"; + if (argument.type_get() == lib_args.enum_type.boolean) { + pattern_back = "(?:" + pattern_back + ")?"; + } + pattern += pattern_back; + } + lib_plankton.log.debug("lib_args:read:probing_as_volatile:pattern", { + "pattern": pattern + }); + var regexp = new RegExp(pattern); + var matching = regexp.exec(part); + lib_plankton.log.debug("lib_args:read:probing_as_volatile:matching", { + "matching": matching + }); + if (matching == null) { + // do nothing + } + else { + argument.assign(data, name, matching[1]); + return true; + } + } + return false; + }, + function () { + lib_plankton.log.debug("lib_args:read:probing_as_positional", { + "part": part + }); + var positional = _this.filter(lib_args.enum_kind.positional); + for (var _i = 0, _a = Object.entries(positional); _i < _a.length; _i++) { + var _b = _a[_i], name = _b[0], argument = _b[1]; + if (argument.parameters_get()['index'] !== index_expected_1) { + // do nothing + } + else { + lib_plankton.log.debug("lib_args:read:probing_as_positional:trying", { + "part": part, + "argument": argument.toString() + }); + var pattern = ""; + { + var pattern_back = ""; + pattern_back += "(" + argument.pattern_value() + ")"; + pattern += pattern_back; + } + lib_plankton.log.debug("lib_args:read:probing_as_positional:pattern", { + "pattern": pattern + }); + var regexp = new RegExp(pattern); + var matching = regexp.exec(part); + lib_plankton.log.debug("lib_args:read:probing_as_positional:matching", { + "matching": matching + }); + if (matching == null) { + return false; + } + else { + argument.assign(data, name, matching[1]); + index_expected_1 += 1; + return true; + } + } + } + return false; + }, + ].some(function (x) { return x(); }); + if (!found) { + lib_plankton.log.warning("lib_args:read:could_not_parse", { + "part": part + }); + } + }); + } + return data; + break; + } + default: { + throw (new Error("unhandled environment " + environment)); + break; + } + } + }; + /** + * @author fenris + * @todo handle if the data object doesn't have the required field or the type is wrong or sth. + */ + class_handler.prototype.write = function (environment, data) { + switch (environment) { + case lib_args.enum_environment.cli: { + return (([] + .concat(Object.entries(this.filter(lib_args.enum_kind.volatile)).map(function (_a) { + var name = _a[0], argument = _a[1]; + var values; + switch (argument.mode_get()) { + case lib_args.enum_mode.replace: { + values = [data[argument.name_get()]]; + break; + } + case lib_args.enum_mode.accumulate: { + values = data[argument.name_get()]; + break; + } + } + return (values + .map(function (value) { return ((settings["environment"][environment]["symbols"]["prefix"] + + + argument.parameters_get()["indicators_long"][0]) + + + (settings["environment"][environment]["symbols"]["assignment"] + + + value.toString())); }) + .join(" ")); + })) + .concat(Object.entries(this.filter(lib_args.enum_kind.positional)).map(function (_a) { + var name = _a[0], argument = _a[1]; + var raw = ""; + { + var raw_back = ""; + raw_back += argument.make(data, name); + raw += raw_back; + } + return raw; + }))) + .join(settings["environment"][environment]["symbols"]["delimiter"])); + break; + } + default: { + throw (new Error("unhandled environment " + environment)); + break; + } + } + }; + /** + * @desc manpage-like info-sheet + * @author fenris + */ + class_handler.prototype.generate_help = function (_a) { + var _b = _a["programname"], programname = _b === void 0 ? null : _b, _c = _a["author"], author = _c === void 0 ? null : _c, _d = _a["description"], description = _d === void 0 ? null : _d, _e = _a["executable"], executable = _e === void 0 ? null : _e; + var environment = lib_args.enum_environment.cli; + var output = ""; + { + var section = ""; + { + var line = ""; + line += ""; + line += "INFO"; + line += "\n"; + section += line; + } + { + var line = ""; + line += "\t"; + line += programname + " -- " + description; + line += "\n"; + section += line; + } + section += "\n"; + output += section; + } + { + if (author != null) { + var section = ""; + { + var line = ""; + line += ""; + line += "AUTHOR"; + line += "\n"; + section += line; + } + { + var line = ""; + line += "\t"; + line += "" + author; + line += "\n"; + section += line; + } + section += "\n"; + output += section; + } + } + { + var section = ""; + { + var line = ""; + line += ""; + line += "SYNOPSIS"; + line += "\n"; + section += line; + } + { + var line = ""; + line += "\t"; + line += executable; + line += settings["environment"][environment]["symbols"]["delimiter"]; + line += Object.entries(this.filter(lib_args.enum_kind.positional)) + .map(function (_a) { + var name = _a[0], argument = _a[1]; + var part = ""; + part += "<" + argument.name_get() + ">"; + return part; + }) + .join(settings["environment"][environment]["symbols"]["delimiter"]); + line += settings["environment"][environment]["symbols"]["delimiter"]; + line += Object.entries(this.filter(lib_args.enum_kind.volatile)) + .filter(function (_a) { + var name = _a[0], argument = _a[1]; + return (!argument.hidden_get()); + }) + .map(function (_a) { + var name = _a[0], argument = _a[1]; + var part = ""; + // part += settings["environment"][environment]["symbols"]["prefix"]; + part += "-"; + part += argument.parameters_get()["indicators_short"][0]; + if (argument.type_get() != "boolean") { + /* + part += settings["environment"][environment]["symbols"]["assignment"]; + part += `<${argument.name_get()}>`; + */ + part += " "; + part += "<" + argument.name_get() + ">"; + } + part = "[" + part + "]"; + return part; + }) + .join(settings["environment"][environment]["symbols"]["delimiter"]); + line += "\n"; + section += line; + } + section += "\n"; + output += section; + } + { + var section = ""; + { + var line = ""; + line += ""; + line += "OPTIONS"; + line += "\n"; + section += line; + } + { + section += (Object.entries(this.arguments_) + .filter(function (_a) { + var name = _a[0], argument = _a[1]; + return (!argument.hidden_get()); + }) + .map(function (_a) { + var name = _a[0], argument = _a[1]; + return argument.generate_help(); + }) + .join("\n")); + } + section += "\n"; + output += section; + } + return output; + }; + return class_handler; + }()); + lib_args.class_handler = class_handler; +})(lib_args || (lib_args = {})); +/* +This file is part of »bacterio-plankton:client«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:client« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:client« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:client«. If not, see . + */ +var lib_client; +(function (lib_client) { + /** + * @author fenris + */ + function make(host, port, verbosity = 1) { + return { + "host": host, + "port": port, + "verbosity": verbosity, + }; + } + lib_client.make = make; + /** + * @author fenris + */ + function log(subject, level, message) { + if (subject.verbosity >= level) { + console.log("[client]", message); + } + else { + // do nothing + } + } + /** + * @author fenris + */ + function query(subject, input) { + const nm_net = require("net"); + return (new Promise((resolve, reject) => { + const client = nm_net.createConnection({ + "host": subject.host, + "port": subject.port + }, () => { + log(subject, 2, "connection established"); + client.write(input); + }); + client.on("data", (output_raw) => { + const output = output_raw.toString(); + resolve(output); + client.end(); + }); + client.on("end", () => { + log(subject, 2, "connection terminated"); + }); + })); + } + lib_client.query = query; +})(lib_client || (lib_client = {})); +/* +This file is part of »bacterio-plankton:client«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:client« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:client« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:client«. If not, see . + */ +var lib_client; +(function (lib_client) { + /** + * @author fenris + */ + class class_client { + /** + * @author fenris + */ + constructor(host, port, verbosity) { + this.subject = lib_client.make(host, port, verbosity); + } + /** + * @author fenris + */ + query(input) { + return lib_client.query(this.subject, input); + } + } + lib_client.class_client = class_client; +})(lib_client || (lib_client = {})); +/* +This file is part of »bacterio-plankton:file«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:file« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:file« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:file«. If not, see . + */ +var lib_file; +(function (lib_file) { + /** + * @author fenris + */ + function read_regular_promise(path) { + const nm_fs = require("fs"); + return (lib_call.promise_make((resolve, reject) => { + nm_fs.readFile(path, { + "encoding": "utf8", + "flag": "r", + }, (error, content) => { + if (error == null) { + resolve(content); + } + else { + reject(error); + } + }); + })); + } + /** + * @author fenris + */ + function read_http_promise(path) { + return (lib_call.promise_make((resolve, reject) => { + const nm_url = require("url"); + const parsed_url = nm_url.parse(path, false, true); + const client = ((parsed_url.protocol === "https:") + ? require("https") + : require("http")); + const default_port = ((parsed_url.protocol == "https:") + ? 443 + : 80); + const options = { + "hostname": parsed_url.hostname, + "port": (parsed_url.port || default_port), + "path": parsed_url.path, + "method": "GET" + }; + let req = client.request(options, (res) => { + let data = ""; // @todo + res.on("data", (chunk) => { + data += chunk; + }); + res.on("end", () => { + resolve(data); + }); + }); + req.end(); + req.on("error", (error) => { + reject(error); + }); + })); + } + /** + * @author fenris + */ + function write_regular_promise(path, content) { + const nm_fs = require("fs"); + return (lib_call.promise_make((resolve, reject) => { + nm_fs.writeFile(path, content, { + "encoding": "utf8", + "flag": "w", + }, (error) => { + if (error == null) { + resolve(undefined); + } + else { + reject(error); + } + }); + })); + } + /** + * @author maspr,fenris + */ + function determine_handler(path) { + if (new RegExp("^https?:\/\/").test(path)) { + return "http"; + } + else { + return "file"; + } + } + /** + * @author fenris,maspr + * @todo clear up if http(s)-handling belongs here or not ... + */ + function read_promise(path) { + switch (determine_handler(path)) { + case "file": { + return read_regular_promise(path); + break; + } + case "http": { + return read_http_promise(path); + break; + } + default: { + const message = "unhandled protocol"; + return lib_call.promise_reject(new Error(message)); + break; + } + } + } + lib_file.read_promise = read_promise; + /** + * @author fenris + */ + function write_promise(path, content) { + return write_regular_promise(path, content); + } + lib_file.write_promise = write_promise; + /** + * @author fenris + */ + function read_stdin() { + return (new Promise((resolve, reject) => { + let input_raw = ""; + process.stdin.setEncoding("utf8"); + process.stdin.on("readable", () => { + let chunk; + while ((chunk = process.stdin.read()) !== null) { + input_raw += chunk; + } + }); + process.stdin.on("end", () => { + resolve(input_raw); + }); + })); + } + lib_file.read_stdin = read_stdin; +})(lib_file || (lib_file = {})); +/* +This file is part of »bacterio-plankton:file«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:file« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:file« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:file«. If not, see . + */ +var lib_file; +(function (lib_file) { + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function read_json_promise(path) { + return (lib_call.promise_resolve(undefined) + .then(_ => lib_file.read_promise(path)) + .then(content => lib_call.promise_make((resolve, reject) => { + let error; + let data; + try { + data = JSON.parse(content); + error = null; + } + catch (exception) { + let message = `invalid json '${path}'`; + error = new class_error(message, [exception]); + } + if (error == null) { + resolve(data); + } + else { + reject(error); + } + }))); + } + lib_file.read_json_promise = read_json_promise; + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function write_json_promise(path, data) { + return lib_file.write_promise(path, JSON.stringify(data, undefined, "\t")); + } + lib_file.write_json_promise = write_json_promise; + /** + * @author fenris + * @deprecated use promises instead of executors + */ + function read_executor(path) { + return lib_call.promise_to_executor(lib_file.read_promise(path)); + } + lib_file.read_executor = read_executor; + /** + * @author fenris + * @deprecated use promises instead of executors + */ + function write_executor(path, content) { + return lib_call.promise_to_executor(lib_file.write_promise(path, content)); + } + lib_file.write_executor = write_executor; + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + * @deprecated use promises instead of executors + */ + function read_json_executor(path) { + return lib_call.promise_to_executor(read_json_promise(path)); + } + lib_file.read_json_executor = read_json_executor; + /** + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + * @deprecated use promises instead of executors + */ + function write_json_executor(path, data) { + return lib_call.promise_to_executor(write_json_promise(path, data)); + } + lib_file.write_json_executor = write_json_executor; + /** + * @desc reads a file + * @author fenris + * @todo replace with promise version + */ + function read(path) { + return read_executor(path); + } + lib_file.read = read; + /** + * @desc writes a file + * @author fenris + * @todo replace with promise version + */ + function write(path, content) { + return write_executor(path, content); + } + lib_file.write = write; + /** + * @desc reads a json file + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function read_json(path) { + return read_json_executor(path); + } + lib_file.read_json = read_json; + /** + * @desc writes a json file + * @author fenris + * @deprecated lib_file shouldn't care for code stuff; use a combination of lib_file and lib_code instead + */ + function write_json(path, data) { + return write_json_executor(path, data); + } + lib_file.write_json = write_json; +})(lib_file || (lib_file = {})); +/* +This file is part of »bacterio-plankton:observer«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:observer« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:observer« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:observer«. If not, see . + */ +var lib_observer; +(function (lib_observer) { + /** + * @author fenris + */ + function make(_a) { + var _b = _a === void 0 ? {} : _a, _c = _b["force_registration"], force_registration = _c === void 0 ? false : _c, _d = _b["no_attendants_warn_do"], no_attendants_warn_do = _d === void 0 ? false : _d, _e = _b["no_attendants_warn_action"], no_attendants_warn_action = _e === void 0 ? (function (eventname) { return console.warn("no attendants for event '" + eventname + "'"); }) : _e; + return { + "actions": {}, + "force_registration": force_registration, + "no_attendants_warn_do": no_attendants_warn_do, + "no_attendants_warn_action": no_attendants_warn_action, + }; + } + lib_observer.make = make; + /** + * @author fenris + */ + function present(observer, eventname) { + return (observer.actions.hasOwnProperty(eventname)); + } + /** + * @author fenris + */ + function register(observer, eventname) { + if (!present(observer, eventname)) { + observer.actions[eventname] = []; + } + else { + // do nothing + // warn that it is already registered? + } + } + lib_observer.register = register; + /** + * @author fenris + */ + function attend(observer, eventname, action) { + if (!present(observer, eventname)) { + if (observer.force_registration) { + throw (new Error("no event '" + eventname + "'")); + } + else { + register(observer, eventname); + } + } + else { + // do nothing + } + observer.actions[eventname].push(action); + } + lib_observer.attend = attend; + /** + * @author fenris + */ + function notify(observer, eventname, data) { + if (!present(observer, eventname)) { + if (observer.force_registration) { + throw (new Error("no event '" + eventname + "'")); + } + else { + register(observer, eventname); + } + } + else { + if (observer.no_attendants_warn_do) { + if (observer.actions[eventname].length <= 0) { + observer.no_attendants_warn_action(eventname); + } + else { + // do nothing + } + } + else { + // do nothing + } + observer.actions[eventname] + .forEach(function (action) { + action(data); + }); + } + } + lib_observer.notify = notify; +})(lib_observer || (lib_observer = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + function sequence(length) { + return ((length > 0) ? sequence(length - 1).concat([length - 1]) : []); + } + /** + * @author fenris + */ + function find(word, part, equality, /*= instance_collate*/ right_to_left = false) { + let result = -1; + let found = sequence(word.length - part.length + 1).some(function (position) { + let position_ = (right_to_left + ? (word.length - part.length - position) + : (position)); + let matches = sequence(part.length).every(index => equality(word[position_ + index], part[index])); + if (matches) { + result = position_; + return true; + } + else { + return false; + } + }); + return result; + } + lang.find = find; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + class class_symbol_terminal { + /** + * @desc [constructor] + * @author fenris + */ + constructor(terminal, equality_terminal = ((x, y) => (x == y))) { + this.terminal = terminal; + this.equality_terminal = equality_terminal; + } + /** + * @author fenris + */ + terminal_get() { + return this.terminal; + } + /** + * @override + * @author fenris + */ + equals(symbol) { + if (symbol instanceof class_symbol_terminal) { + let symbol_terminal = (symbol); + return this.equality_terminal(this.terminal, symbol_terminal.terminal); + } + else { + return false; + } + } + /** + * @override + * @author fenris + */ + toString() { + return JSON.stringify(this); + } + /** + * @author fenris + */ + static tree_generic(terminal) { + return (new lib_plankton.lang.class_symbol_terminal(terminal)); + } + /** + * @author fenris + */ + static tree_default(terminal) { + return (new lib_plankton.lang.class_symbol_terminal(terminal)); + } + } + lang.class_symbol_terminal = class_symbol_terminal; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + class class_symbol_variable { + /** + * @desc [constructor] + * @author fenris + */ + constructor(variable, meaning = undefined) { + this.variable = variable; + this.meaning = meaning; + } + /** + * @desc [accessor] [getter] + * @author fenris + */ + variable_get() { + return this.variable; + } + /** + * @desc [accessor] [getter] + * @author fenris + */ + meaning_get() { + return this.meaning; + } + /** + * @override + * @author fenris + */ + equals(symbol) { + if (symbol instanceof class_symbol_variable) { + let symbol_variable = (symbol); + return (this.variable == symbol_variable.variable); + } + else { + return false; + } + } + /** + * @override + * @author fenris + */ + toString() { + return JSON.stringify(this); + } + /** + * @author fenris + */ + static tree_generic(variable) { + return (new lib_plankton.lang.class_symbol_variable(variable)); + } + /** + * @author fenris + */ + static tree_default(variable) { + return (new lib_plankton.lang.class_symbol_variable(variable)); + } + } + lang.class_symbol_variable = class_symbol_variable; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + function lexerrule_make(search, construct) { + let observer = lib_observer.make(); + lib_observer.register(observer, "start"); + lib_observer.register(observer, "message_sequence"); + lib_observer.register(observer, "maximum_reached"); + lib_observer.attend(observer, "start", ({ "rule": rule }) => { + lib_plankton.log.debug("lang:lexer:run:current_rule", { + "rule": lexerrule_show(rule), + }); + }); + lib_observer.attend(observer, "message_sequence", ({ "tokens": tokens }) => { + lib_plankton.log.debug("lang:lexer:run:current_sequence", { + "tokens": tokens, + }); + }); + lib_observer.attend(observer, "maximum_reached", () => { + lib_plankton.log.warning("lang:lexer:run:maximum_reached", {}); + }); + return { + "search": search, + "construct": construct, + "observer": observer, + }; + } + lang.lexerrule_make = lexerrule_make; + /** + * @author fenris + * @todo schön machen? is aber vermutlich gar nicht möglich :/ + */ + function lexerrule_show(rule) { + return "(nicht darstellbar)"; + } + lang.lexerrule_show = lexerrule_show; + /** + * @author fenris + */ + function lexerrule_apply(rule, tokens) { + /** + * @todo Wert sollte konfigurierbar sein + */ + let maximum = (1 << 10); + lib_observer.notify(rule.observer, "start", { "rule": rule }); + let offset = 0; + // process _all_ occurences + while (true) { + lib_observer.notify(rule.observer, "message_sequence", { "tokens": tokens }); + if (maximum-- <= 0) { + lib_observer.notify(rule.observer, "maximum_reached", {}); + break; + } + let found = tokens.slice(offset).some(function (token_old, index) { + if (token_old.terminal.is_just()) { + return false; + } + else { + let result = rule.search(token_old.sequence); + if (!result.found) { + return false; + } + else { + // der Ersatz für den Platz von "token_old" + let tokens_new = []; + // die Zeichen des alten Tokens, die vor der Übereinstimmung stehen + { + let nonempty = (result.data.position > 0); + if (nonempty) { + let sequence = token_old.sequence.slice(0, result.data.position); + tokens_new.push({ + "sequence": sequence, + "terminal": new class_nothing(), + }); + } + } + // die Zeichen der Übereinstimmung + { + let sequence = token_old.sequence.slice(result.data.position, result.data.position + result.data.length); + let terminals = rule.construct(sequence); + terminals.forEach((terminal) => { + tokens_new.push({ + "sequence": null, + "terminal": new class_just(terminal), + }); + }); + } + // die Zeichen des alten Tokens, die hinter der Übereinstimmung stehen + { + let nonempty = (result.data.position + result.data.length < token_old.sequence.length); + if (nonempty) { + let sequence = token_old.sequence.slice(result.data.position + result.data.length /*, + token_old.sequence.length*/); + tokens_new.push({ + "sequence": sequence, + "terminal": new class_nothing(), + }); + } + } + /* + console.log("-- offset_old: ", offset); + console.log("-- index: ", index); + console.log("-- token_old: ", token_old); + offset += index; + console.log("-- offset_new: ", offset); + */ + tokens = [] + .concat(tokens.slice(0, index)) + .concat(tokens_new) + .concat(tokens.slice(index + 1)); + return true; + } + } + }); + if (!found) { + break; + } + } + return tokens; + } + lang.lexerrule_apply = lexerrule_apply; + /** + * @author fenris + */ + function lexerrule_pass() { + return lexerrule_make((part) => ({ "found": true, "data": { "position": 0, "length": 1 } }), (part) => part); + } + lang.lexerrule_pass = lexerrule_pass; + /** + * @author fenris + */ + function lexerrule_pattern_generic(rule_raw) { + let regexp = new RegExp(rule_raw.pattern); + return lexerrule_make((part) => { + const part_ = part.join(""); + // console.log(`searching for '${regexp.toString()}' in '${part_}' ...`); + const match_ = regexp.exec(part_); + // console.log(`... result: `, match_); + if (match_ == null) { + return { "found": false }; + } + else { + return { "found": true, "data": { "position": match_.index, "length": match_[0].length } }; + } + }, rule_raw.construct); + } + lang.lexerrule_pattern_generic = lexerrule_pattern_generic; + /** + * @author fenris + */ + function lexerrule_pattern_ignore(pattern) { + return (lexerrule_pattern_generic({ + "pattern": pattern, + "construct": tokens => [] + })); + } + lang.lexerrule_pattern_ignore = lexerrule_pattern_ignore; + /** + * @author fenris + */ + function lexerrule_pattern_void(pattern, id) { + return (lexerrule_pattern_generic({ + "pattern": pattern, + "construct": tokens => [{ "id": id, "data": {} }], + })); + } + lang.lexerrule_pattern_void = lexerrule_pattern_void; + /** + * @author fenris + */ + function lexerrule_pattern_boolean(pattern, id, value) { + return (lexerrule_pattern_generic({ + "pattern": pattern, + "construct": tokens => [{ "id": id, "data": { "value": value } }], + })); + } + lang.lexerrule_pattern_boolean = lexerrule_pattern_boolean; + /** + * @author fenris + */ + function lexerrule_pattern_int(pattern, id) { + return (lexerrule_pattern_generic({ + "pattern": pattern, + "construct": tokens => [{ "id": id, "data": { "value": parseInt(tokens.join("")) } }], + })); + } + lang.lexerrule_pattern_int = lexerrule_pattern_int; + /** + * @author fenris + */ + function lexerrule_pattern_float(pattern, id) { + return (lexerrule_pattern_generic({ + "pattern": pattern, + "construct": tokens => [{ "id": id, "data": { "value": parseFloat(tokens.join("")) } }], + })); + } + lang.lexerrule_pattern_float = lexerrule_pattern_float; + /** + * @author fenris + */ + function lexerrule_pattern_string(pattern, id) { + return (lexerrule_pattern_generic({ + "pattern": pattern, + "construct": tokens => [{ "id": id, "data": { "value": tokens.join("") } }], + })); + } + lang.lexerrule_pattern_string = lexerrule_pattern_string; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /* + -- input + [("0 & !0",—)] + -- ws + [("0",—),("& !0",—)] + [("0",—),("&",—),("!0",—)] + -- const + [("0",),("&",—),("!0",—)] + [("0",),("&",—),("!",—),("0",)] + -- not + [("0",),("&",—),("!",),("0",)] + -- and + [("0",),("&",),("!",),("0",)] + */ + /** + * @author fenris + */ + function lexer_dumb_make(rules) { + let observer = lib_observer.make(); + lib_observer.register(observer, "start"); + lib_observer.register(observer, "fail"); + lib_observer.attend(observer, "start", ({ "input": input }) => { + lib_plankton.log.info("lib_plankton.lang:lexer:run:begin", { + "input": input, + }); + }); + lib_observer.attend(observer, "fail", ({ "open": open }) => { + lib_plankton.log.warning("lib_plankton.lang:lexer:run:fail", { + "sequence": open.map(token => String(token.sequence)), + }); + }); + return { + "rules": rules, + "observer": observer, + }; + } + lang.lexer_dumb_make = lexer_dumb_make; + /** + * @author fenris + */ + function lexer_dumb_run(subject, input, configuration = { + "use_reduce": false, + }) { + lib_observer.notify(subject.observer, "start", { "input": input }); + let tokens; + if (configuration.use_reduce) { + tokens = subject.rules.reduce((tokens, rule) => lang.lexerrule_apply(rule, tokens), [ + { + "sequence": input, + "terminal": new class_nothing(), + } + ]); + } + else { + tokens = [ + { + "sequence": input, + "terminal": new class_nothing(), + } + ]; + subject.rules.forEach((rule) => (tokens = lang.lexerrule_apply(rule, tokens))); + } + let open = tokens.filter(token => token.terminal.is_nothing()); + if (open.length > 0) { + lib_observer.notify(subject.observer, "fail", { "open": open }); + throw (new Error("failed")); + } + else { + return tokens.map(token => token.terminal.cull()); + } + } + lang.lexer_dumb_run = lexer_dumb_run; + /** + * @author fenris + */ + function lexer_dumb_pass() { + return lexer_dumb_make([ + lang.lexerrule_pass(), + ]); + } + lang.lexer_dumb_pass = lexer_dumb_pass; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + class class_lexerrule { + /** + * @author fenris + */ + constructor(subject) { + this.subject = subject; + } + /** + * @author fenris + */ + static construct({ "search": search, "construct": construct, }) { + let subject = lang.lexerrule_make(search, construct); + return (new class_lexerrule(subject)); + } + /** + * @author fenris + */ + subject_get() { + return this.subject; + } + /** + * @author fenris + */ + search(part) { + return this.subject.search(part); + } + /** + * @author fenris + */ + construct(part) { + return this.subject.construct(part); + } + /** + * @author fenris + */ + static pass() { + return (new class_lexerrule(lang.lexerrule_pass())); + } + /** + * @author fenris + */ + static pattern_generic(rule_raw) { + return (new class_lexerrule(lang.lexerrule_pattern_generic(rule_raw))); + } + /** + * @author fenris + */ + static pattern_ignore(pattern) { + return (new class_lexerrule(lang.lexerrule_pattern_ignore(pattern))); + } + /** + * @author fenris + */ + static pattern_void(pattern, id) { + return (new class_lexerrule(lang.lexerrule_pattern_void(pattern, id))); + } + /** + * @author fenris + */ + static pattern_boolean(pattern, id, value) { + return (new class_lexerrule(lang.lexerrule_pattern_boolean(pattern, id, value))); + } + /** + * @author fenris + */ + static pattern_int(pattern, id) { + return (new class_lexerrule(lang.lexerrule_pattern_int(pattern, id))); + } + /** + * @author fenris + */ + static pattern_float(pattern, id) { + return (new class_lexerrule(lang.lexerrule_pattern_float(pattern, id))); + } + /** + * @author fenris + */ + static pattern_string(pattern, id) { + return (new class_lexerrule(lang.lexerrule_pattern_string(pattern, id))); + } + } + lang.class_lexerrule = class_lexerrule; + /** + * @author fenris + */ + class class_lexer_dumb { + /** + * @author fenris + */ + constructor(subject) { + this.subject = subject; + } + /** + * @author fenris + */ + static construct(rules) { + const subject = lang.lexer_dumb_make(rules.map(rule => rule.subject_get())); + return (new class_lexer_dumb(subject)); + } + /** + * @author fenris + */ + run(input) { + return lang.lexer_dumb_run(this.subject, input); + } + /** + * @author fenris + */ + static pass() { + return (new class_lexer_dumb(lang.lexer_dumb_pass())); + } + } + lang.class_lexer_dumb = class_lexer_dumb; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @desc [constructor] + * @author fenris + */ + function parserrule_make({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left = false, }) { + return { + "premise": premise, + "conclusion": conclusion, + "construct": construct, + "right_to_left": right_to_left, + }; + } + lang.parserrule_make = parserrule_make; + /** + * @author fenris + */ + function parserrule_check(parserrule, sequence) { + let position = lang.find(sequence, parserrule.conclusion, (x, y) => x.equals(y), parserrule.right_to_left); + return position; + } + lang.parserrule_check = parserrule_check; + /** + * @author fenris + */ + function parserrule_construct(parserrule, args, terminals) { + return parserrule.construct(args, terminals); + } + lang.parserrule_construct = parserrule_construct; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + function parser_dumb_make(start, rules, equality_terminal = ((x, y) => (x == y))) { + let observer = lib_observer.make(); + lib_observer.register(observer, "start"); + lib_observer.register(observer, "message_sequence"); + lib_observer.register(observer, "use_rule"); + lib_observer.register(observer, "fail"); + lib_observer.attend(observer, "start", ({ "input": input }) => { + lib_plankton.log.info("lib_plankton.lang:parser:run:begin", { + "input": input + }); + }); + lib_observer.attend(observer, "message_sequence", ({ "sequence": sequence }) => { + lib_plankton.log.debug("lib_plankton.lang:parser:run:current_sequence", { + "tokens": sequence, + }); + }); + lib_observer.attend(observer, "use_rule", ({ "rule": rule, "conclusion": conclusion }) => { + lib_plankton.log.debug("lib_plankton.lang:parser:run:using_the_following_rule", { + "conclusion": conclusion.map(symbol => symbol.toString()), + "premise": rule.premise.toString(), + }); + }); + lib_observer.attend(observer, "fail", ({ "sequence": sequence }) => { + lib_plankton.log.error("lib_plankton.lang:parser:run:failed", { + "last_sequence": sequence, + }); + }); + return { + "start": start, + "rules": rules, + "equality_terminal": equality_terminal, + "observer": observer, + }; + } + lang.parser_dumb_make = parser_dumb_make; + /** + * @override + * @author fenris + */ + function parser_dumb_run(parser_dumb, input, target_variable) { + if (target_variable === undefined) { + target_variable = parser_dumb.start; + } + lib_observer.notify(parser_dumb.observer, "start", { "input": input }); + let maximum = (1 << 10); + let current = (input + .map((terminal) => { + return (new lang.class_symbol_terminal(terminal, parser_dumb.equality_terminal)); + })); + while (true) { + lib_observer.notify(parser_dumb.observer, "message_sequence", { "sequence": current }); + if (maximum-- <= 0) { + break; + } + const found = parser_dumb.rules.some(function (rule, index) { + let conclusion = rule.conclusion; + let position = lang.parserrule_check(rule, current); + if (position >= 0) { + lib_observer.notify(parser_dumb.observer, "use_rule", { "rule": rule, "conclusion": conclusion }); + let terminals = (current + .slice(position, position + conclusion.length) + .filter(x => (x instanceof lang.class_symbol_terminal /**/)) + .map(element => (element).terminal_get())); + let args = (current + .slice(position, position + conclusion.length) + .filter(x => (x instanceof lang.class_symbol_variable /**/)) + .map(element => (element).meaning_get())); + let meaning = rule.construct(args, terminals); + let symbol = (new lang.class_symbol_variable(rule.premise, meaning)); + current = ([] + .concat(current.slice(0, position)) + .concat([symbol]) + .concat(current.slice(position + conclusion.length))); + return true; + } + else { + return false; + } + }); + if (!found) { + break; + } + } + if ((current.length == 1) + && + (current[0] instanceof lang.class_symbol_variable /**/) + && + ((current[0]).variable_get() === target_variable)) { + return (current[0]).meaning_get(); + } + else { + lib_observer.notify(parser_dumb.observer, "fail", { "sequence": current }); + /* + console.warn("--", "parsing failed"); + console.info("--", "last sequence was:"); current.forEach(element => console.info(element)); + */ + // return null; + throw (new Error("parsing failed")); + } + } + lang.parser_dumb_run = parser_dumb_run; + /** + * @author fenris + */ + function parser_dumb_tree(start, rules_raw, equality_terminal = ((x, y) => (x == y))) { + return (parser_dumb_make(start, rules_raw.map((rule_raw) => { + return (lang.parserrule_make({ + "premise": rule_raw.premise, + "conclusion": rule_raw.conclusion, + "construct": (args, tokens) => { + return { + "label": rule_raw.label, + "value": tokens, + "children": args, + }; + }, + "right_to_left": rule_raw.right_to_left, + })); + }), equality_terminal)); + } + lang.parser_dumb_tree = parser_dumb_tree; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + class class_parserrule { + /** + * @desc [constructor] + * @author fenris + */ + constructor(subject) { + this.subject = subject; + } + /** + * @desc [constructor] + * @author fenris + */ + static construct({ "premise": premise, "conclusion": conclusion, "construct": construct, "right_to_left": right_to_left = false, }) { + return (new class_parserrule({ + "premise": premise, + "conclusion": conclusion, + "construct": construct, + "right_to_left": right_to_left, + })); + } + /** + * @desc [accessor] [getter] + * @author fenris + */ + subject_get() { + return this.subject; + } + /** + * @desc [accessor] [getter] + * @author fenris + */ + premise_get() { + return this.subject.premise; + } + /** + * @desc [accessor] [getter] + * @author fenris + */ + conclusion_get() { + return this.subject.conclusion; + } + /** + * @desc [accessor] + * @author fenris + */ + check(sequence) { + return (lang.parserrule_check(this.subject, sequence)); + } + /** + * @desc [accessor] + * @author fenris + */ + construct(args, terminals) { + return (lang.parserrule_construct(this.subject, args, terminals)); + } + } + lang.class_parserrule = class_parserrule; + /** + * @author fenris + * @todo fatal error on empty conclusion + */ + class class_parser_dumb { + /** + * @author fenris + */ + constructor(subject) { + this.subject = subject; + } + /** + * @author fenris + */ + static construct(start, rules, equality_terminal = ((x, y) => (x == y))) { + const subject = lang.parser_dumb_make(start, rules.map(rule => rule.subject_get()), equality_terminal); + return (new class_parser_dumb(subject)); + } + /** + * @override + * @author fenris + */ + run(input, target_variable) { + return lang.parser_dumb_run(this.subject, input, target_variable); + } + /** + * @author fenris + */ + static tree(start, rules_raw, equality_terminal = ((x, y) => (x == y))) { + return (new class_parser_dumb(lang.parser_dumb_tree(start, rules_raw, equality_terminal))); + } + } + lang.class_parser_dumb = class_parser_dumb; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + function reader_run(lexer_run, parser_run, input, target_variable) { + const syntax = lexer_run(input); + lib_plankton.log.info("lib_plankton.lang:reader:syntax", { + "syntax": syntax, + }); + const semantics = parser_run(syntax, target_variable); + lib_plankton.log.info("lib_plankton.lang:reader:semantics", { + "semantics": semantics, + }); + return semantics; + } + lang.reader_run = reader_run; + /** + * @author fenris + */ + function reader_default({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }) { + return (new lib_plankton.lang.class_reader(lang.class_lexer_dumb.construct(lexer_rules), lang.class_parser_dumb.tree(parser_start, parser_rules, (x, y) => (x.id == y.id)))); + } + lang.reader_default = reader_default; + /** + * @author fenris + */ + function default_raw({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }) { + return (this.default({ + "lexer_rules": lexer_rules.map((lexerrule_raw) => { + switch (lexerrule_raw.type) { + case "ignore": { + return lang.class_lexerrule.pattern_ignore(lexerrule_raw.parameters["pattern"]); + break; + } + case "void": { + return lang.class_lexerrule.pattern_void(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + case "boolean": { + return lang.class_lexerrule.pattern_boolean(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"], lexerrule_raw.parameters["value"]); + break; + } + case "int": { + return lang.class_lexerrule.pattern_int(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + case "float": { + return lang.class_lexerrule.pattern_float(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + case "string": { + return lang.class_lexerrule.pattern_string(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + default: { + throw (new Error(`unhandled type for raw lexer-rule '${lexerrule_raw.type}'`)); + break; + } + } + }), + "parser_start": parser_start, + "parser_rules": parser_rules.map((parserrule_raw) => { + return ({ + "label": parserrule_raw.label, + "premise": parserrule_raw.premise, + "conclusion": parserrule_raw.conclusion.map(entry => { + switch (entry.type) { + case "terminal": { + return (new lib_plankton.lang.class_symbol_terminal({ "id": entry.parameters["id"] })); + break; + } + case "variable": { + return (new lib_plankton.lang.class_symbol_variable(entry.parameters["id"])); + break; + } + default: { + throw (new Error(`unhandled type for raw parser-rule '${entry.type}'`)); + break; + } + } + }), + "right_to_left": parserrule_raw.right_to_left, + }); + }), + })); + } + lang.default_raw = default_raw; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); +/* +This file is part of »bacterio-plankton:lang«. + +Copyright 2016-2021 'Christian Fraß, Christian Neubauer, Martin Springwald GbR' + + +»bacterio-plankton:lang« is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +»bacterio-plankton:lang« is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public License +along with »bacterio-plankton:lang«. If not, see . + */ +var lib_plankton; +(function (lib_plankton) { + var lang; + (function (lang) { + /** + * @author fenris + */ + class class_reader { + /** + * @author fenris + */ + constructor(lexer, parser) { + this.lexer = lexer; + this.parser = parser; + } + /** + * @desc [accessor] yes, it's really just lexing and parsing + * @author fenris + */ + run(input, target_variable) { + /* + const syntax : Array = this.lexer.run(input); + lib_plankton.log.info( + "lang:reader:syntax", + { + "syntax": syntax, + } + ); + const semantics : type_result = this.parser.run(syntax, target_variable); + lib_plankton.log.info( + "lang:reader:semantics", + { + "semantics": semantics, + } + ); + return semantics; + */ + return lang.reader_run((input) => this.lexer.run(input), (input, target_variable) => this.parser.run(input, target_variable), input, target_variable); + } + /** + * @author fenris + */ + static default({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }) { + return (new lib_plankton.lang.class_reader(lang.class_lexer_dumb.construct(lexer_rules), lang.class_parser_dumb.tree(parser_start, parser_rules, (x, y) => (x.id == y.id)))); + } + /** + * @author fenris + */ + static default_raw({ "lexer_rules": lexer_rules, "parser_start": parser_start, "parser_rules": parser_rules, }) { + return (this.default({ + "lexer_rules": lexer_rules.map((lexerrule_raw) => { + switch (lexerrule_raw.type) { + case "ignore": { + return lang.class_lexerrule.pattern_ignore(lexerrule_raw.parameters["pattern"]); + break; + } + case "void": { + return lang.class_lexerrule.pattern_void(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + case "boolean": { + return lang.class_lexerrule.pattern_boolean(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"], lexerrule_raw.parameters["value"]); + break; + } + case "int": { + return lang.class_lexerrule.pattern_int(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + case "float": { + return lang.class_lexerrule.pattern_float(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + case "string": { + return lang.class_lexerrule.pattern_string(lexerrule_raw.parameters["pattern"], lexerrule_raw.parameters["id"]); + break; + } + default: { + throw (new Error(`unhandled type for raw lexer-rule '${lexerrule_raw.type}'`)); + break; + } + } + }), + "parser_start": parser_start, + "parser_rules": parser_rules.map((parserrule_raw) => { + return ({ + "label": parserrule_raw.label, + "premise": parserrule_raw.premise, + "conclusion": parserrule_raw.conclusion.map(entry => { + switch (entry.type) { + case "terminal": { + return (new lib_plankton.lang.class_symbol_terminal({ "id": entry.parameters["id"] })); + break; + } + case "variable": { + return (new lib_plankton.lang.class_symbol_variable(entry.parameters["id"])); + break; + } + default: { + throw (new Error(`unhandled type for raw parser-rule '${entry.type}'`)); + break; + } + } + }), + "right_to_left": parserrule_raw.right_to_left, + }); + }), + })); + } + } + lang.class_reader = class_reader; + })(lang = lib_plankton.lang || (lib_plankton.lang = {})); +})(lib_plankton || (lib_plankton = {})); diff --git a/lib/plankton/plankton.swm.json b/lib/plankton/plankton.swm.json deleted file mode 100644 index 6ff9b09..0000000 --- a/lib/plankton/plankton.swm.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "logic-decl": [ - "/home/fenris/projekte/greenscale/type2/lib/plankton/./call/logic-decl.d.ts", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./file/logic-decl.d.ts", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./lang/logic-decl.d.ts", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./observer/logic-decl.d.ts", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./base/logic-decl.d.ts" - ], - "logic-impl": [ - "/home/fenris/projekte/greenscale/type2/lib/plankton/./call/logic-impl.js", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./file/logic-impl.js", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./lang/logic-impl.js", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./observer/logic-impl.js", - "/home/fenris/projekte/greenscale/type2/lib/plankton/./base/logic-impl.js" - ] -} diff --git a/source/head.js b/source/head.js new file mode 100644 index 0000000..41de4b4 --- /dev/null +++ b/source/head.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node + diff --git a/source/type2.ts b/source/type2.ts index ea2c017..07b6d3d 100644 --- a/source/type2.ts +++ b/source/type2.ts @@ -19,170 +19,108 @@ along with »type2«. If not, see . */ -const _fs = require("fs"); +/** + * @author fenris + */ +type type_resulttree = lib_plankton.lang.type_tree; /** * @author fenris */ -type type_parameters = {path ?: string; input ?: Array;}; +type type_myreader = lib_plankton.lang.class_reader; /** * @author fenris */ -type type_foo_1 = {parameters : type_parameters; reader : type_myreader;}; - - -/** - * @author fenris - */ -type type_foo_2 = lib_lang.type_tree; - - -/** - * @author fenris - */ -type type_myreader = lib_lang.class_reader; - - -/** - * @author fenris - */ -function generate_reader( +async function generate_reader( path : string -) : lib_call.type_promise +) : Promise { - return ( - lib_call.promise_resolve(undefined) - .then( - () => lib_file.read_promise(path) - ) - .then( - (content) => lib_call.promise_resolve( - JSON.parse(content) - ) - ) - .then( - (data) => lib_call.promise_resolve( - lib_lang.class_reader.default_raw(data) - ) - ) - ); + const content : string = await lib_file.read_promise(path); + const data : any = JSON.parse(content); + const reader : type_myreader = lib_plankton.lang.class_reader.default_raw(data); + return Promise.resolve(reader); } /** * @author fenris */ -function transform_arguments( - args : Array -) : type_parameters +async function main( + args_raw : Array +) : Promise { - let parameters : type_parameters = {}; - // path - { - const path : string = ( - (args.length >= 1) - ? args.shift() - : null + const args_handler : lib_args.class_handler = new lib_args.class_handler({ + "path": lib_args.class_argument.positional({ + "index": 0, + "type": lib_args.enum_type.string, + "mode": lib_args.enum_mode.replace, + "info": "the path to the grammar file", + "name": "path", + }), + "verbosity": lib_args.class_argument.volatile({ + "indicators_short": ["v"], + "indicators_long": ["verbosity"], + "type": lib_args.enum_type.integer, + "mode": lib_args.enum_mode.replace, + "default": 1, + "info": "verbosity level", + "name": "verbosity", + }), + "help": lib_args.class_argument.volatile({ + "indicators_short": ["h"], + "indicators_long": ["help"], + "type": lib_args.enum_type.boolean, + "mode": lib_args.enum_mode.replace, + "default": false, + "info": "show help and exit", + "name": "help", + }), + }); + const args : Record = args_handler.read(lib_args.enum_environment.cli, args_raw.join(" ")); + if (args["help"]) { + process.stdout.write( + args_handler.generate_help({ + "programname": "type2", + "description": "reads a string from stdin and parses it according to a given grammar to an abstract JSON output", + "author": "Christian Fraß ", + "executable": "type2", + }) ); - if (path == null) { - throw (new Error("no path specified")) + return Promise.resolve(undefined); + } + else { + lib_plankton.log.conf_push( + (args["verbosity"] <= 0) + ? [] + : [ + new lib_plankton.log.class_channel_minlevel( + new lib_plankton.log.class_channel_console(), + [ + lib_plankton.log.enum_level.error, + lib_plankton.log.enum_level.warning, + lib_plankton.log.enum_level.notice, + lib_plankton.log.enum_level.info, + lib_plankton.log.enum_level.debug, + ][args["verbosity"]-1] + ), + ] + ); + + // exec + const reader : type_myreader = await generate_reader(args["path"]); + const input_raw : string = await lib_file.read_stdin(); + const result : type_resulttree = reader.run(input_raw.split("")); + if (result === null) { + return Promise.reject(new Error("reading failed")); } else { - parameters["path"] = path; + process.stdout.write(JSON.stringify(result, undefined, "\t") + "\n"); + return Promise.resolve(undefined); } } - // input - { - let input : Array; - const input_raw : string = args.join(" "); - if (input_raw == "") { - throw (new Error("no input given")); - } - else { - input = input_raw.split(""); - parameters["input"] = input; - } - } - return parameters; -} - - -/** - * @author fenris - */ -function main( - args : Array -) : lib_call.type_promise -{ - return ( - lib_call.promise_resolve(undefined) - .then( - () => lib_call.promise_make( - (resolve, reject) => { - // TODO: outsource reading from stdin to a plankton module - let input_raw : string = ""; - process.stdin.setEncoding( - "utf8" - ); - process.stdin.on( - "readable", - () => { - let chunk : string; - while ((chunk = process.stdin.read()) !== null) { - input_raw += chunk; - } - } - ); - process.stdin.on( - "end", - () => { - resolve(input_raw); - } - ); - } - ) - ) - .then( - (input_raw) => lib_call.promise_resolve( - transform_arguments([args[0], input_raw]) - ) - ) - .then( - (parameters) => ( - generate_reader(parameters.path) - .then( - (reader) => lib_call.promise_resolve( - { - "parameters": parameters, - "reader": reader, - } - ) - ) - ) - ) - .then( - (vars) => { - lib_log.level_push(1); - const result : type_foo_2 = vars.reader.run(vars.parameters.input); - lib_log.level_pop(); - if (result == null) { - return lib_call.promise_reject(new Error("didn't work")); - } - else { - return lib_call.promise_resolve(result); - } - } - ) - .then( - (result) => { - console.info(JSON.stringify(result, undefined, "\t")); - return lib_call.promise_resolve(undefined); - } - ) - ); } @@ -191,11 +129,11 @@ function main( */ main(process.argv.slice(2)) .then( - (output) => { - // console.info("--", "done:", output); + () => { + // process.stderr.write("done"); }, (error) => { - console.error("--", "failed:", error); + process.stderr.write(error.toString() + "\n"); } ); diff --git a/tools/build b/tools/build new file mode 100755 index 0000000..796073a --- /dev/null +++ b/tools/build @@ -0,0 +1,4 @@ +#!/usr/bin/env sh + +make -f tools/makefile + diff --git a/tools/makefile b/tools/makefile new file mode 100644 index 0000000..cd98f68 --- /dev/null +++ b/tools/makefile @@ -0,0 +1,23 @@ +## dirs +dir_temp := temp +dir_build := build + +## commands +cmd_log := echo "--" +cmd_directory_create := mkdir -p +cmd_concatenate := cat +cmd_chmod := chmod +cmd_typescript_compile := tsc --lib es2018 + +## rules +build/type2: source/head.js lib/plankton/plankton.js temp/unlinked.js + @ ${cmd_log} "linking …" + @ ${cmd_directory_create} ${dir_build} + @ ${cmd_concatenate} $^ > $@ + @ ${cmd_chmod} +x $@ + +temp/unlinked.js: lib/plankton/plankton.d.ts source/base.ts source/type2.ts + @ ${cmd_log} "compiling …" + @ ${cmd_directory_create} ${dir_temp} + @ ${cmd_typescript_compile} $^ --outFile $@ + diff --git a/lib/plankton/update.sh b/tools/update-plankton old mode 100644 new mode 100755 similarity index 61% rename from lib/plankton/update.sh rename to tools/update-plankton index a56fc5a..cf0b6b2 --- a/lib/plankton/update.sh +++ b/tools/update-plankton @@ -2,8 +2,10 @@ modules="" modules="${modules} call" +modules="${modules} args" modules="${modules} file" modules="${modules} lang" -ptk fetch node ${modules} +cd lib/plankton +ptk bundle node ${modules}