================== Value containing commas ================== #!srfv1 #!long name::alice, bob and carol cost:num:$1,000,000,000.42 --- (document (magic) (directive (directive_long)) (field (untyped_field (key) (value))) (field (typed_field (key) (type_hint) (value)))) ================== Key containing a comma ================== #!srfv1 #!long last, first::alice --- (document (magic) (directive (directive_long)) (field (untyped_field (key) (value)))) ================== Non-ASCII values ================== #!srfv1 #!long tokyo dinner:num:¥15,000 airbus:num:€410,000,000 --- (document (magic) (directive (directive_long)) (field (typed_field (key) (type_hint) (value))) (field (typed_field (key) (type_hint) (value)))) ================== Leading whitespace is insignificant ================== #!srfv1 #!long name::alice, bob # indented comment age:num:30 --- (document (magic) (directive (directive_long)) (field (untyped_field (key) (value))) (comment) (field (typed_field (key) (type_hint) (value)))) ================== Whitespace around the type hint ================== #!srfv1 #!long n: num : 5 m:num:6 --- (document (magic) (directive (directive_long)) (field (typed_field (key) (type_hint) (value))) (field (typed_field (key) (type_hint) (value)))) ================== Empty values ================== #!srfv1 #!long missing:null: also missing:: name::alice --- (document (magic) (directive (directive_long)) (field (typed_field (key) (type_hint))) (field (untyped_field (key))) (field (untyped_field (key) (value)))) ================== Values that look like other syntax ================== #!srfv1 #!long url::https://x.example/a?b=1,c=2 note::alice # not an inline comment shrug::, --- (document (magic) (directive (directive_long)) (field (untyped_field (key) (value))) (field (untyped_field (key) (value))) (field (untyped_field (key) (value)))) ================== Records separated by blank lines ================== #!srfv1 #!long name::alice, of the alices age:num:30 name::bob, of the bobs age:num:25 --- (document (magic) (directive (directive_long)) (field (untyped_field (key) (value))) (field (typed_field (key) (type_hint) (value))) (blank_line) (field (untyped_field (key) (value))) (field (typed_field (key) (type_hint) (value)))) ================== Long format from the SRF README ================== #!srfv1 # mandatory comment with format and version. Parser instructions start with #! #!requireeof # Set this if you want parsing to fail when #!eof not present on last line #!long # Mandatory to use multiline records, compact format is optional #!compact # A comment # empty lines ignored key::string value, with any data except a \n. an optional string length between the colons this is a number:num: 5 null value:null: array::array's don't exist. Use json or toml or something data with newlines must have a length:7:foo bar boolean value:bool:false # Empty line separates records, but comments don't count as empty key::this is the second record this is a number:num:42 null value:null: array::array's still don't exist data with newlines must have a length::single line #!eof # eof marker, useful to make sure your file wasn't cut in half. Only considered if requireeof set at top --- (document (magic (inline_comment)) (directive (directive_requireeof (inline_comment))) (directive (directive_long (inline_comment))) (comment) (comment) (blank_line) (field (untyped_field (key) (value))) (field (typed_field (key) (type_hint) (value))) (field (typed_field (key) (type_hint))) (field (untyped_field (key) (value))) (field (typed_field (key) (type_hint) (value))) (field (typed_field (key) (type_hint) (value))) (blank_line) (comment) (field (untyped_field (key) (value))) (field (typed_field (key) (type_hint) (value))) (field (typed_field (key) (type_hint))) (field (untyped_field (key) (value))) (field (untyped_field (key) (value))) (directive (directive_eof (inline_comment))))