Differences From
Artifact [996aa283a7]:
814 814 <B> Hyacinth, I told you not to contact me without—
815 815 <A, shouting> god DAMMIT woman I am trying to SAVE your worthless skin
816 816 <B> Hyacinth! your Godforsaken scrambler!
817 817 <A> …oh, [!fuck].
818 818 (signal lost)
819 819 ~~~
820 820
821 +## specification license
822 +the text of this specification is made available under the terms of the Creative Commons CC-BY-NC-SA 4.0 license. the binding license text may be found in the [`cortav] source control tree at the following paths:
823 ++ language + license text location
824 +| english | [`legal/cc-by-nc-sa.en]
825 +| german | [`legal/cc-by-nc-sa.de]
826 +[*should the texts be interpreted to conflict in translation, the most restrictive subset of terms shall apply.]
827 +
821 828 #refimpl reference implementation
822 829 the cortav standard is implemented in [`cortav.lua], found in this repository. only the way [`cortav.lua] interprets the cortav language is defined as a reference implementation; other behaviors are simply how [`cortav.lua] implements the specification and may be copied, ignored, tweaked, violently assaulted, or used as inspiration by a compliant parser.
823 830
824 831 the reference implementation can be used both as a lua library and from the command line. [`cortav.lua] contains the parser and renderers, [`ext/*] contain various extensions, [`sirsem.lua] contains utility functions, and [`cli.lua] contains the CLI driver.
825 832
826 833 ##refimpl-lib lua library
827 834 there are various ways to use cortav from a lua script; the simplest however is probably to precompile your script with luac and link in the necessary components of the implementation. for instance, say we have the following program
................................................................................
956 963 [*do note] that no cortav implementation needs to concern itself with character class data. this functionality is provided in the reference implementation strictly as an (optional) extension to the spec to improve usability, not as a normative requirement.
957 964
958 965 corran: http://ʞ.cc/fic/spirals/society
959 966 tengwar: https://en.wikipedia.org/wiki/Tengwar
960 967
961 968 ###refimpl-switches switches
962 969 [`cortav.lua] offers various switches to control its behavior.
963 -+ long + short + function +
964 -| [`--out [$file]] :|:[`-o]:| sets the output file (default stdout) |
965 -| [`--log [$file]] :|:[`-l]:| sets the log file (default stderr) |
966 -| [`--define [$var] [$val]] :|:[`-d]:| sets the context variable [$var] to [$val] |
970 ++ long + short + function
971 +| [`--out [$file]] :|:[`-o]:| sets the output file (default stdout)
972 +| [`--log [$file]] :|:[`-l]:| sets the log file (default stderr)
973 +| [`--define [$var] [$val]] :|:[`-d]:| sets the context variable [$var] to [$val]
967 974 | [`--mode-set [$mode]] :|:[`-y]:| activates the [>refimpl-mode mode] with ID [!mode]
968 -| [`--mode-clear [$mode]] :|:[`-n]:| disables the mode with ID [!mode] |
969 -| [`--mode [$id] [$val]] :|:[`-m]:| configures mode [$id] with the value [$val] |
975 +| [`--mode-clear [$mode]] :|:[`-n]:| disables the mode with ID [!mode]
976 +| [`--mode [$id] [$val]] :|:[`-m]:| configures mode [$id] with the value [$val]
970 977 | [`--mode-set-weak [$mode]] :|:[`-Y]:| activates the [>refimpl-mode mode] with ID [$mode] if the source file does not specify otherwise
971 978 | [`--mode-clear-weak [$mode]] :|:[`-N]:| disables the mode with ID [$mode] if the source file does not specify otherwise
972 979 | [`--mode-weak [$id] [$val]] :|:[`-M]:| configures mode [$id] with the value [$val] if the source file does not specify otherwise
973 -| [`--help] :|:[`-h]:| display online help |
974 -| [`--version] :|:[`-V]:| display the interpreter version |
980 +| [`--help] :|:[`-h]:| display online help
981 +| [`--version] :|:[`-V]:| display the interpreter version
975 982
976 983 ###refimpl-mode modes
977 984 most of [`cortav.lua]'s implementation-specific behavior is controlled by use of [!modes]. these are namespaced options which may have a boolean, string, or numeric value. boolean modes are set with the [`-y] [`-n] flags; other modes use the [`-m] flags.
978 985
979 986 most modes are defined by the renderer backend. the following modes affect the behavior of the frontend:
980 987
981 988 + ID + type + effect
................................................................................
1151 1158
1152 1159 ### intent files
1153 1160 there's currently no standard way to describe the intent and desired formatting of a document besides placing pragmata in the source file itself. this is extremely suboptimal, as when generating collections of documents, it's ideal to be able to keep all formatting information in one place. users should also be able to specify their own styling overrides that describe the way they prefer to read [`cortav] files, especially for uses like gemini or gopher integration.
1154 1161
1155 1162 at some point soon [`cortav] needs to address this by adding intent files that can be activated from outside the source file, such as with a command line flag or a configuration file setting. these will probably consist of lines that are interpreted as pragmata. in addition to the standard intent format however, individual implementations should feel free to provide their own ways to provide intent metadata; e.g. the reference implementation, which has a lua interpreter available, should be able to take a lua script that runs after the parse stage and makes arbitrary alterations to the AST. this will be particularly useful for the end-user who wishes to specify a particular format she likes reading her files in without forcing that format on everyone she sends the compiled document to, as it will be able to interrogate the document and make intelligent decisions about what pragmata to apply.
1156 1163
1157 1164 intent files should also be able to define [>rsrc resources], [>ctxvar context variables], and macros.
1165 +
1166 +## implementation license
1167 +the cortav reference implementation is made available under the terms of the European Union Public License v1.2. the binding license text may be found in the [`cortav] source control tree at the following paths:
1168 ++ language + license text location
1169 +| english | [`legal/eupl.en]
1170 +| german | [`legal/eupl.de]
1171 +[*should the texts be interpreted to conflict in translation, the most restrictive subset of terms shall apply.]
1172 +
1173 +# trademarks
1174 +the name "cortav" is a trademark of alexis hale, and may be used only insofar as the following terms apply:
1175 +: the name "cortav" is applied to an implementation of the cortav language that strictly conforms to at least [>levels level 1] of this specification
1176 +: the name is not used unqualified; i.e. no project may name itself simply "cortav". below are some examples of permissible names under this term:
1177 +:: cortav-scheme
1178 +:: cortav.c
1179 +:: pycortav
1180 +this grant may be revoked at any time, for any reason, by the trademark owner. if you wish to use the name "cortav" in contravention of this grant or simply require stronger legal guarantees, feel free to contact me and we can probably work something out as long as you're not some corporate asshole.