Skip to content

Commit 6fcbb5d

Browse files
author
Evgeny Bob
authored
Merge pull request #18 from jimdigriz/nested
support nested properties
2 parents c20c219 + 38a255a commit 6fcbb5d

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

src/eini_parser.yrl

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ Nonterminals
2727
title_words
2828
title
2929
property_with_skip_lines
30-
properties property
30+
properties property_base property
31+
properties_nested property_nested
3132
key_part
3233
values single_value
3334
skip_lines
@@ -86,9 +87,18 @@ properties -> property_with_skip_lines properties : ['$1' | '$2'].
8687
property_with_skip_lines -> property : '$1'.
8788
property_with_skip_lines -> property skip_lines : '$1'.
8889

89-
property -> key_part '=' values break :
90+
property_base -> key_part '=' values break :
9091
{list_to_atom(value_of('$1')), strip_values('$3')}.
9192

93+
property -> property_base : '$1'.
94+
property -> key_part '=' break properties_nested :
95+
{list_to_atom(value_of('$1')), '$4'}.
96+
97+
properties_nested -> property_nested : ['$1'].
98+
properties_nested -> property_nested properties_nested : ['$1' | '$2'].
99+
100+
property_nested -> blank property_base : '$2'.
101+
92102
key_part -> word : '$1'.
93103
key_part -> word blank : '$1'.
94104
key_part -> blank word : '$2'.
@@ -98,7 +108,7 @@ values -> single_value : ['$1'].
98108
values -> single_value values : ['$1' | '$2'].
99109

100110
%% At value position, any characters are accepted AS IS.
101-
single_value -> word : value_of('$1').
111+
single_value -> word : value_of('$1').
102112
single_value -> value : value_of('$1').
103113
single_value -> blank : value_of('$1').
104114
single_value -> comment : value_of('$1').

test/eini_tests.erl

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,20 @@ one_section_title_and_one_prop_test_() ->
349349
"[title] \n"
350350
"key1= value1 \n"
351351
)),
352+
%% nested properties: https://docs.aws.amazon.com/credref/latest/refdocs/file-format.html
353+
?_assertEqual({ok, [
354+
{title, [{key1,[{key11,<<"value11">>},{key12,<<"value12">>},{key13,<<"value13">>},{key14,<<"value14">>}]},{key2,<<"value2">>}]}
355+
]},
356+
parse(
357+
"[title]\n"
358+
"key1 =\n"
359+
" key11=value11\n"
360+
" key12 =value12\n"
361+
" key13= value13\n"
362+
" key14 = value14\n"
363+
"key2=value2\n"
364+
)),
365+
352366
%% value has characters which can not used in titles or keys
353367
?_assertEqual({ok, [
354368
{title, [{key1, <<"value1$% '""#!+*=@/:+">>}]}

0 commit comments

Comments
 (0)