From cab0634b2120a6572c6ce7873aecabcc1ca61314 Mon Sep 17 00:00:00 2001 From: Marcin Olichwiruk <21108638+olichwiruk@users.noreply.github.com> Date: Mon, 13 Jan 2025 23:13:38 +0100 Subject: [PATCH] feat: add ocafile grammar rules for AttributeFraming Overlay --- semantics/oca-file/src/ocafile.pest | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/semantics/oca-file/src/ocafile.pest b/semantics/oca-file/src/ocafile.pest index 6a21890..764fe70 100644 --- a/semantics/oca-file/src/ocafile.pest +++ b/semantics/oca-file/src/ocafile.pest @@ -132,6 +132,7 @@ oca_object = _{ entry_code | entry | link | + attribute_framing | flagged_attrs ) } @@ -153,6 +154,7 @@ remove_oca_object = _{ entry_code | entry | link | + attribute_framing | flagged_attrs ) } @@ -172,6 +174,21 @@ entry_code = {^"entry_code" ~ arg_ws ~ attrs_key ~ attr_entry_code_key_pairs} entry = {^"entry" ~ arg_ws ~ lang ~ arg_ws ~ attrs_key ~ attr_entry_key_pairs} unit = {^"unit" ~ arg_ws ~ attrs_key ~ unit_attr_key_pairs} link = {^"link" ~ arg_ws ~ reference_type ~ arg_ws ~ attrs_key ~ attr_key_pairs} +attribute_framing = {^"attr_framing" ~ arg_ws ~ framing_metadata ~ arg_ws ~ attrs_key ~ attr_framing_key_pairs+} + +framing_metadata_key = ${ "id" | "label" | "location" | "version" } +framing_metadata_value = ${ string | char+ } +framing_metadata_pair = @{ framing_metadata_key ~ arg_ws? ~ "=" ~ arg_ws? ~ framing_metadata_value } +framing_metadata = { framing_metadata_pair ~ (arg_ws ~ framing_metadata_pair)* } + +attr_framing_key_pair = @{ attr_key ~ arg_ws? ~ "=" ~ arg_ws? ~ json_object } +attr_framing_key_pairs = ${ arg_ws* ~ attr_framing_key_pair ~ (arg_ws | NEWLINE)? } + +url = ${ string } +json_key = ${ string } +json_value = ${ string | url | json_object } +json_pair = ${ json_key ~ arg_ws* ~ ":" ~ (arg_ws | NEWLINE)? ~ json_value ~ (arg_ws? ~ "," ~ (arg_ws | NEWLINE)?)? } +json_object = ${ "{" ~ ((arg_ws | NEWLINE)? ~ arg_ws* ~ json_pair ~ (arg_ws | NEWLINE)?)+ ~ arg_ws* ~ "}" } flagged_attrs = {^"flagged_attributes" ~ arg_ws ~ list_value} classification = { ^"classification" ~ arg_ws ~ classification_value}