FLL - Specifications - EKI-0001 (Basic)
Author: Kevin Day
Description: Featurless Linux Library Specifications
Keywords: Kevin Day, Kevux, FLL, Featureless, Linux, Library, Distribution, Open-Source, specification, standard, eki-0001, basic

# Featureless Linux Library Specification

## EKI-0001 (Basic)

The version date of this specification is `2024/11/03`.

This specification provides a small set of vocabulary names meant to be associated with common uses, such as e-mail addresses and Uniform Resource Locators.

Vocabulary:

address
  Any mailing address, except for e-mail and URI.
code
  All text contained within represent code and should be presented as such.
email
  Any valid e-mail address.
phone
  Any valid phone number.
quote
  All text within represents some quote.
uri
  Any valid URI (allows URL and URN).
url
  Any valid URL.
urn
  Any valid URN.
var
  All text contained within represents some sort of variable.

## Common Specification Rules

EKI is an extended EKI format that introduces the ability to have multiple variable names (Objects) per variable value (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 Object, now supports an additional character, `:` (`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 `:` (`U+003A`) before the opening single quote (`U+0027`), double quote (`U+0022`), or grave (`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:

- `\o` = any printable word character, including `_`, `-`, `+` (and Unicode equivalents).
- `\O` = any printable word character, including `_`, `-`, `+` (and Unicode equivalents) followed by a colon `:` (`U+003A`) (cannot be only a colon by itself).
- `\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.
- `\q` = either a single quote `'` (`U+0027`), a double quote `"` (`U+0022`), or a grave ``` (`U+0060`).
- `\x` = any character.
- `\W` = any non-word character, discluding `_` (and Unicode equivalents), `-` (and Unicode equivalents), `+` (and Unicode equivalents), and colon `:` (`U+003A`).
- `\e` = an optional escape sequence of any number of backslashes, such as `\` (`U+005C`).
- `[` = a single conditionally optional open bracket, `[` (`U+005B`).
- `]` = a single conditionally optional close bracket, `]` (`U+005D`).
- `*` = zero or more occurrences.
- `~` = one or more occurrences, or zero if at start of file.
- `+` = one or more occurrences.
- `:` = The colon `:` (`U+003A`).

Before Structure:

- `\x*\W~`

Structure:

- `[\O*\o+]\e:\q\c\q`

After Structure:

- ``

Example File:

    # 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.

Example Results:

    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