/*========================================================================= Program: Visualization Toolkit Module: vtkMotionFXCFGGrammar.h Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #ifndef vtkMotionFXCFGGrammar_h #define vtkMotionFXCFGGrammar_h // Internal header used by vtkMotionFXCFGReader. // We define the various grammars here rather than clobbering the // vtkMotionFXCFGReader.cxx. #include // for debugging // clang-format off #include VTK_PEGTL(pegtl/contrib/tracer.hpp) // clang-format on namespace MotionFX { using namespace tao::pegtl; //----------------------------------------------------------------------------- // lets define some common rules here. namespace Common { struct Sign : sor, one<'-'>> { }; struct Exponent : seq, one<'E'>>, opt, plus> { }; struct Number : seq, sor, one<'.'>, star>, seq, plus>, plus>, opt> { }; // delimiter for columns in files such as the position files // this can be ',' separated by optional spaces or just spaces struct Delimiter : sor, one<','>, star>, plus> { }; } // namespace Common //----------------------------------------------------------------------------- // rules for parsing a position file in legacy format, also called old rot.vel. // format. namespace LegacyPositionFile { using namespace Common; // format: time CoMx CoMy CoMz Fx Fy Fz struct Row : seq, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, star> { }; struct Grammar : star { }; } // namespace LegacyPositionFile //----------------------------------------------------------------------------- // rules for parsing a position file in orientations formation. namespace OrientationsPositionFile { using namespace Common; // format: time CoMx CoMy CoMz cosX cosY cosZ Orientation (radians) struct Row : seq, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, star> { }; struct Grammar : star { }; } // namespace OrientationsPositionFile //----------------------------------------------------------------------------- // rules for parsing a universal transform file namespace UniversalTransformRow { using namespace Common; // format: time // trnvecx trnvecy trnvecz // rotcntrx rotcntry rotcntrz // quat0 quat1 quat2 quat3 // scalex scaley scalez struct Row : seq, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, Delimiter, Number, star> { }; struct Grammar : star { }; } // namespace UniversalTransformRow //----------------------------------------------------------------------------- // rules to parse CFG file. namespace CFG { using namespace Common; // Rule that matches a Comment. Consume everything on the line following a ';' struct Comment : seq, until> { }; struct WS_Required : sor> { }; struct WS : star { }; struct Value : plus> { }; struct ParameterName : identifier { }; struct Statement : seq { }; struct StatementOther : seq>> { }; struct Motion : seq, WS, list, WS, one<'}'>> { }; struct Motions : seq, WS, list, WS, one<'}'>> { }; struct OtherNonNested : seq, WS, list, WS, one<'}'>> { }; struct OtherNested : seq, WS, list, WS>, WS, one<'}'>> { }; struct Lines : sor { }; struct Grammar : star { }; } // namespace CFG } // namespace MotionFX #endif // VTK-HeaderTest-Exclude: vtkMotionFXCFGGrammar.h