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

IKI Specifications:
  IKI is a minimally structured WIKI-like syntax meant to be simpler than WIKI syntax.

  The IKI syntax describes a italic:"Variable" that is defined by a italic:"Vocabulary" name followed by quoted value called the italic:"Content".

  The italic:"Variable" refers to the italic:"Vocabulary", italic:"Content", and associated syntax that describes the italic:"Variable".
  The italic:"Variable" name may be wrapped by a single open bracket, character:"[" (unicode:"U+005B"), at the start and a single close bracket, character:"]" (unicode:"U+005D"), at the end.
  The open and close brackets, also called the wrapping characters, for the italic:"Variable" do not utilize escaping characters and instead any escaping is perform against the colon character:":" (unicode:"U+003A") that separates the italic:"Vocabulary" from the italic:"Content".
  The italic:"Vocabulary" generally defines the context and many of the IKI specifications may provide a discrete set of allowed italic:"Vocabulary".
  The italic:"Vocabulary" may also be referred to as the italic:"Object".
  The italic:"Vocabulary" only allows word characters or one of character:"_" (unicode:"U+005F"), character:"-" (unicode:"U+002D"), character:"+" (unicode:"U+002B"), character:"[" (unicode:"U+005B")).
  White space, non-word, and non character:"_" (unicode:"U+005F"), character:"-" (unicode:"U+002D"), character:"+" (unicode:"U+002B")) character punctuation may not exist as part of the variable name.
  The only Unicode dash-like characters allowed as a "dash" are those intended to connect, such as the Unicode hyphens (unicode:"U+2010" and unicode:"U+2011").
  Unicode punctuation connector characters are supported just like character:"_", except when they connect outside the current line (such as unicode:"U+FE33" character:"︳").
  The immediate left of a italic:"Vocabulary" must not be a valid italic:"Vocabulary" character, unless the italic:"Vocabulary" is wrapped using the wrapping characters.
  Unicode invisible punctuation (such as invisible plus: unicode:"U+2064") are not considered a punctuation in this standard (because they a zero-width characters), therefore they are not to be considered a valid character:"_" (unicode:"U+005F"), character:"-" (unicode:"U+002D"), or character:"+" (unicode:"U+002B") Unicode equivalents.

  The wrapping characters characters are not part of the italic:"Vocabulary" name and instead only provide the syntax used to help identify a valid italic:"Variable".
  The wrapping characters characters are part of the italic:"Variable".
  The wrapping characters do not support escaping.
  Both wrapping characters must be specified or neither.

  The italic:"Content" refers to the value of the italic:"Variable".
  The italic:"Content" is wrapped one of the following quote characters: single quote character:"'" (unicode:"U+0027"), double quote character:'"' (unicode:"U+0022"), or grave character:'`' (unicode:"U+0060").
  The italic:"Content" must escape any quotes that match the open and close quote used for the italic:"Variable" by utilizing a backslash character:"\\" (unicode:"U+005C").
  If a matching closing quote is not found until the end of the data (or file), then this unclosed italic:"Variable" is considered invalid.
  The handling of this erroneous case is left to the implementation.

  The backslashes used for escaping quotes use character:"\\" (unicode:"U+005C").
  Unless otherwise specified, these backslash escapes are performed only when required and not unilaterally.
  One backslash escapes the valid quote, resulting in the quote being part of the italic:"Content".
  Two backslashes escape the backslash, resulting in the backslash (but not the quote) being part of the italic:"Content".
  An odd number of backslashes before a valid quote results in the backslashes and the quote being escaped.
  An even number of backslashes before a valid quote results in the backslashes but not the quote being escaped.

  The IKI format will use code:"iki-0000" to represent an IKI with no explicitly defined vocabulary.
  Whereas code:"iki-0001" and beyond represent a specific IKI vocabulary.

  Key\:
    code:"\o" = any printable word character, including character:"_" (unicode:"U+005F"), character:"-" (unicode:"U+002D"), character:"+" (unicode:"U+002B") (and Unicode equivalents).
    code:"\c" = any character, including white space and non-printing, and any escaped quote (used as the opening quote) or a any quote (unescaped) 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:"_" (unicode:"U+005F") (and Unicode equivalents), character:"-" (unicode:"U+002D") (and Unicode equivalents), and character:"+" (unicode:"U+002B") (and Unicode equivalents).
    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+]\e:\q\c\q"

  After Structure\:
    code:""

  Example\:
    code:`# fss-000c iki-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 such as this example URL: 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 IKI syntax anyway).

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

    The following italic\:"is escaped to not be treated as IKI Variable".

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

    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) URL
     3.1) FSS
     4.1) code
     5.1) context
     6.1) context
     7.1) one
     8.1) two
     9.1) three
    10.1) six
    11.1) one
    12.1) two
    13.1) three
    14.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) " escape
     8.1) \
     9.1) \" escape
    10.1) \\\
    11.1) \' escape
    12.1) \\' escape
    13.1) \\\' escape
    14.1) \\\\\\' escape

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