Trio
Overview
Trio stands for "Text Record Input/Output". Trio is a simple plain text format used for hand authoring Haystack data. It is derived as a semi-subset of YAML. It is the primary format for authoring the tag definitions on the Project Haystack site itself.
Trio is represented by the def TrioFile.
Format
Trio uses a simple plain text format designed for easy editing by hand:
-
entities are separated by lines beginning with "-", the lines can have as many dashes as you want followed by a newline (a line with just dashes)
-
each entity is defined by one or more tags
-
one line is used per tag formatted as "name:val"
-
if no value is specified, the value is assumed to be Marker
-
the value is encoded using the same grammar as Zinc
-
string values may be left unquoted if they begin with a non-ASCII Unicode character or contain only the "safe" chars: 'A-Z', 'a-z', or underbar
-
booleans may be encoded as true/false or Zinc T/F; however if using nested lists/dicts then you must the Zinc T/F syntax
-
if a newline follows the colon, then the value is an indented multi-line string terminated by the first non-indented line
-
nested data may be encoded with Zinc or Trio as a multi-line string prefixed with the string value "Zinc:" or "Trio:" on the tag line
-
nested lists may be encoded in Zinc as a multi-line string prefixed with "[" on the tag line; the multi-line string should be parsed as follows: 1) skip lines starting with "//", 2) strip newlines, and 3) parse a zinc
<val>production -
can use
//as line comment
Here is a simple example:
dis: "Site 1"
site
area: 3702ft²
geoAddr: "100 Main St, Richmond, VA"
geoCoord: C(37.5458,-77.4491)
strTag: OK if unquoted if only safe chars
summary:
This is a string value that spans multiple
lines with two or more space characters
---
name: "Site 2"
site
summary:
Entities are separated by one more dashes
Here are examples with nested data values:
// Zinc
ver:"3.0"
type,val
"list",[1,2,3]
"dict",{dis:"Dict!" foo}
"grid",<<
ver:"2.0"
a,b
1,2
3,4
>>
"scalar","simple string"
// Trio
type:list
val:[1,2,3]
---
type:dict
val:{ dis:"Dict!" foo}
---
type:grid
val:Zinc:
ver:"3.0"
b,a
20,10
// nested list
def: ^myEquip
children: [
{fan, motor, equip},
{damper, actuator, equip},
]