# fss-0002 iki-0000
#
# license open-standard-license-1.0-or-later
# version 2024/11/21
#
# This file (assumed to be named eki.txt) can be more easily read using the following iki_read commands:
#   iki_read eki.txt +Q -w -WWW character "'" "'" code '"' '"' italic '"' '"'
#
# To read the "EKI Specifications" section of this file, use this command sequence:
#   fss_basic_list_read eki.txt +Q -cn "EKI Specifications" | iki_read +Q -w -WWW character "'" "'" code '"' '"' italic '"' '"'
#

EKI Specifications:
  EKI is an extended EKI format that introduces the ability to have multiple variable names (italic:"Objects") per variable value (italic:"Content").

  The EKI syntax is identical to the EKI syntax and all of its rules apply except for the modification defined in this specification.

  This variable name, or italic:"Object", now supports an additional character, character:":" (unicode:"U+003A"), is used to separate each individual variable name.
  Each variable name must follow the same requirements of a valid variable name as specified in the EKI specification.
  Only the last character:":" (unicode:"U+003A") before the opening single quote (unicode:"U+0027"), double quote (unicode:"U+0022"), or grave (unicode:"U+0060") shall be a candidate for being escaped.
  When this escape is in place of a valid EKI variable, then that would be variable is no longer considered an EKI variable.

  Key\:
    code:"\o" = any printable word character, including character:"_", character:"-", character:"+" (and Unicode equivalents).
    code:"\O" = any printable word character, including character:"_", character:"-", character:"+" (and Unicode equivalents) followed by a colon character:":" (unicode:"U+003A") (cannot be only a colon by itself).
    code:"\c" = any character, including white space and non-printing, and any delimited quote (used as the opening quote) or a any quote (undelimited) not used as the opening quote.
    code:"\q" = either a single quote character:"'" (unicode:"U+0027"), a double quote character:'"' (unicode:"U+0022"), or a grave character:'`' (unicode:"U+0060").
    code:"\x" = any character.
    code:"\W" = any non-word character, discluding character:"_" (and Unicode equivalents), character:"-" (and Unicode equivalents), character:"+" (and Unicode equivalents), and colon character:":" (unicode:"U+003A").
    code:"\e" = an optional escape sequence of any number of backslashes, such as character:"\\" (unicode:"U+005C").
    code:"[" = a single conditionally optional open bracket, character:"[" (unicode:"U+005B").
    code:"]" = a single conditionally optional close bracket, character:"]" (unicode:"U+005D").
    code:"*" = zero or more occurrences.
    code:"~" = one or more occurrences, or zero if at start of file.
    code:"+" = one or more occurrences.
    code:":" = The colon character:":" (unicode:"U+003A").

  Before Structure\:
    code:"\x*\W~"

  Structure\:
    code:"[\O*\o+]\e:\q\c\q"

  After Structure\:
    code:""

  Example\:
    code:`# fss-000c eki-0000

    This is my sentence, anything can go here but sometimes I want to italic:"emphasize some text".

    Other times I want to render a URL with bold such as this example URL: bold:url:\'http://www.example.com/url with space/'.

    There are no comments, except for maybe the FSS:"Featureless Settings Specification" header (which would not resolve to any EKI syntax anyway).

    Quotes may be included, such as: code:"const char *string = \"My \\\"quoted\\\" C string.\";".

    The following bold:italic\:"is escaped to not be treated as EKI data".

    The conditionally optional open and close brackets allow for putting a variable directly next to another word character like: [context]:"bold"this[context]:"bold".

    Multiple Objects within a bracket is also valid, like: before[bold:context]:"important"after.

    These are examples of escapes: one:"\" escape", two:"\\" escape", three:"\\\" escape", six:"\\\\\\" escape".

    These are examples of non-escapes: one:"\' escape", two:"\\' escape", three:"\\\' escape", six:"\\\\\\' escape".

    These slashes \ \\ \\\ are not escaped because there is now quote immediately after each of them.`

  Objects (also called vocabulary or variable name) would be\:
     1.1) italic
     2.1) bold
     2.2) URL
     3.1) FSS
     4.1) code
     5.1) context
     6.1) context
     7.1) bold
     7.2) context
     8.1) one
     9.1) two
    10.1) three
    11.1) six
    12.1) one
    13.1) two
    14.1) three
    15.1) six

  Contents (also called variable value) would be\:
     1.1) emphasize some text
     2.1) http://www.example.com/url with space/
     3.1) Featureless Settings Specification
     4.1) const char *string = "My \"quoted\" C string.";
     5.1) bold
     6.1) bold
     7.1) important
     8.1) " escape
     9.1) \\
    10.1) \" escape
    11.1) \\\
    12.1) \' escape
    13.1) \\' escape
    14.1) \\\' escape
    15.1) \\\\\\' escape

  The following are core specifications (each with a common name associated with the specification number)\:
  - eki-0000: Unrestricted
  - eki-0001: Basic
