From 1333cf1168e645c82c620baa977ad9d777331f0b Mon Sep 17 00:00:00 2001 From: Marko Durkovic Date: Sun, 3 Oct 2021 06:28:02 +0200 Subject: [PATCH] Add string constant support to msg parser --- src/rosbags/typesys/msg.py | 10 ++++++++-- tests/test_parse.py | 3 ++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/rosbags/typesys/msg.py b/src/rosbags/typesys/msg.py index 51936893..8b326905 100644 --- a/src/rosbags/typesys/msg.py +++ b/src/rosbags/typesys/msg.py @@ -44,7 +44,8 @@ comment = r'#[^\n]*' const_dcl - = type_spec identifier '=' integer_literal + = 'string' identifier '=' r'[^\n]+' + / type_spec identifier '=' integer_literal field_dcl = type_spec identifier @@ -172,7 +173,12 @@ class VisitorMSG(Visitor): def visit_const_dcl(self, children: Any) -> Any: """Process const declaration, suppress output.""" - return Nodetype.CONST, (children[0][1], children[1][1], children[3]) + typ = children[0][1] + if typ == 'string': + value = children[3].strip() + else: + value = children[3] + return Nodetype.CONST, (typ, children[1][1], value) def visit_specification(self, children: Any) -> Typesdict: """Process start symbol.""" diff --git a/tests/test_parse.py b/tests/test_parse.py index e0fb995c..7f51ba85 100644 --- a/tests/test_parse.py +++ b/tests/test_parse.py @@ -18,6 +18,7 @@ MSG = """ # comment int32 global=42 +string str= foo bar\t std_msgs/Header header std_msgs/msg/Bool bool @@ -115,7 +116,7 @@ def test_parse_msg(): ret = get_types_from_msg(MSG, 'test_msgs/msg/Foo') assert 'test_msgs/msg/Foo' in ret consts, fields = ret['test_msgs/msg/Foo'] - assert consts == [('global', 'int32', 42)] + assert consts == [('global', 'int32', 42), ('str', 'string', 'foo bar')] assert fields[0][0] == 'header' assert fields[0][1][1] == 'std_msgs/msg/Header' assert fields[1][0] == 'bool'