- Index
- »
- docHaystack
- »
- Trio
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 filetype:trio
.
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}, ]