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