KiCad PCB EDA Suite
wrlproc.h
Go to the documentation of this file.
1 /*
2  * This program source code file is part of KiCad, a free EDA CAD application.
3  *
4  * Copyright (C) 2015-2016 Cirilo Bernardo <cirilo.bernardo@gmail.com>
5  * Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License
9  * as published by the Free Software Foundation; either version 2
10  * of the License, or (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, you may find one here:
19  * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20  * or you may search the http://www.gnu.org website for the version 2 license,
21  * or you may write to the Free Software Foundation, Inc.,
22  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23  */
24 
31 #ifndef WRLPROC_H
32 #define WRLPROC_H
33 
34 #include <fstream>
35 #include <string>
36 #include <vector>
37 
38 #include "richio.h"
39 #include "wrltypes.h"
40 
41 class WRLPROC
42 {
43 public:
44  WRLPROC( LINE_READER* aLineReader );
45  ~WRLPROC();
46 
47  bool eof( void );
48 
49  // return the VRML Version
50  WRLVERSION GetVRMLType( void );
51 
52  // return the parent directory of the current file
53  const char* GetParentDir( void );
54 
55  // helper routines
56  std::string GetError( void );
57  bool GetFilePosData( size_t& line, size_t& column );
58  std::string GetFilePosition() const;
59  std::string GetFileName( void );
60 
61  // eatSpace discards all leading white space from the current m_linepos
62  // and continues until a non-empty line is found which contains non-blank
63  // characters
64  bool EatSpace( void );
65 
66  // Peek returns the next non-white char in the file or '\0' on failure
67  char Peek( void );
68 
69  // Pop removes the current char from the buffer
70  void Pop( void );
71 
72  // read up to the next whitespace or comma
73  bool ReadGlob( std::string& aGlob );
74 
75  // read a VRML name; is similar to ReadGlob except that it enforces
76  // name checking rules, does not allow a comma at the end, and
77  // stops when a left/right brace or bracket is found.
78  bool ReadName( std::string& aName );
79  bool DiscardNode( void ); // discard node data in a matched '{}' set
80  bool DiscardList( void ); // discard list data in a matched '[]' set
81 
82  // single variable readers
83  bool ReadString( std::string& aSFString ); // read a VRML string
84  bool ReadSFBool( bool& aSFBool );
85  bool ReadSFColor( WRLVEC3F& aSFColor );
86  bool ReadSFFloat( float& aSFFloat );
87  bool ReadSFInt( int& aSFInt32 );
88  bool ReadSFRotation( WRLROTATION& aSFRotation );
89  bool ReadSFVec2f( WRLVEC2F& aSFVec2f );
90  bool ReadSFVec3f( WRLVEC3F& aSFVec3f );
91 
92  // array readers
93  bool ReadMFString( std::vector< std::string >& aMFString );
94  bool ReadMFColor( std::vector< WRLVEC3F >& aMFColor );
95  bool ReadMFFloat( std::vector< float >& aMFFloat );
96  bool ReadMFInt( std::vector< int >& aMFInt32 );
97  bool ReadMFRotation( std::vector< WRLROTATION >& aMFRotation );
98  bool ReadMFVec2f( std::vector< WRLVEC2F >& aMFVec2f );
99  bool ReadMFVec3f( std::vector< WRLVEC3F >& aMFVec3f );
100 
101  // getRawLine reads a single non-blank line and in the case of a VRML1 file
102  // it checks for invalid characters (bit 8 set). If m_buf is not empty and
103  // not completely parsed the function returns 'true'. The file position
104  // parameters are updated as appropriate.
105  bool getRawLine( void );
106 
107 private:
109  std::string m_buf; // string being parsed
110  bool m_eof;
111  unsigned int m_fileline;
112  unsigned int m_bufpos;
113 
114  WRLVERSION m_fileVersion; // VRML file version
115  std::string m_error; // error message
116  std::string m_badchars; // characters forbidden in VRML{1|2} names
117  std::string m_filename; // current file
118  std::string m_filedir; // parent directory of the file
119 };
120 
121 #endif // WRLPROC_H
bool ReadMFFloat(std::vector< float > &aMFFloat)
Definition: wrlproc.cpp:1393
bool ReadMFVec3f(std::vector< WRLVEC3F > &aMFVec3f)
Definition: wrlproc.cpp:1839
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition: richio.h:80
bool ReadSFRotation(WRLROTATION &aSFRotation)
Definition: wrlproc.cpp:937
void Pop(void)
Definition: wrlproc.cpp:2035
glm::vec3 WRLVEC3F
Definition: wrltypes.h:188
WRLVERSION
Definition: wrltypes.h:43
bool GetFilePosData(size_t &line, size_t &column)
Definition: wrlproc.cpp:1966
bool ReadSFVec3f(WRLVEC3F &aSFVec3f)
Definition: wrlproc.cpp:1082
WRLVERSION GetVRMLType(void)
Definition: wrlproc.cpp:230
unsigned int m_bufpos
Definition: wrlproc.h:112
std::string m_filedir
Definition: wrlproc.h:118
bool ReadMFInt(std::vector< int > &aMFInt32)
Definition: wrlproc.cpp:1504
glm::vec2 WRLVEC2F
Definition: wrltypes.h:187
glm::vec4 WRLROTATION
Definition: wrltypes.h:189
bool ReadMFVec2f(std::vector< WRLVEC2F > &aMFVec2f)
Definition: wrlproc.cpp:1728
bool ReadGlob(std::string &aGlob)
Definition: wrlproc.cpp:245
~WRLPROC()
Definition: wrlproc.cpp:137
LINE_READER * m_file
Definition: wrlproc.h:108
bool ReadMFColor(std::vector< WRLVEC3F > &aMFColor)
Definition: wrlproc.cpp:1281
unsigned int m_fileline
Definition: wrlproc.h:111
std::string m_badchars
Definition: wrlproc.h:116
std::string m_error
Definition: wrlproc.h:115
bool DiscardNode(void)
Definition: wrlproc.cpp:368
std::string m_buf
Definition: wrlproc.h:109
std::string GetFilePosition() const
Definition: wrlproc.cpp:1982
bool ReadSFFloat(float &aSFFloat)
Definition: wrlproc.cpp:806
std::string m_filename
Definition: wrlproc.h:117
bool ReadSFColor(WRLVEC3F &aSFColor)
Definition: wrlproc.cpp:774
bool ReadSFBool(bool &aSFBool)
Definition: wrlproc.cpp:729
bool m_eof
Definition: wrlproc.h:110
bool ReadString(std::string &aSFString)
Definition: wrlproc.cpp:612
char Peek(void)
Definition: wrlproc.cpp:2007
const char * GetParentDir(void)
Definition: wrlproc.cpp:236
std::string GetFileName(void)
Definition: wrlproc.cpp:1995
WRLPROC(LINE_READER *aLineReader)
Definition: wrlproc.cpp:61
bool ReadName(std::string &aName)
Definition: wrlproc.cpp:289
bool ReadSFInt(int &aSFInt32)
Definition: wrlproc.cpp:867
bool ReadMFRotation(std::vector< WRLROTATION > &aMFRotation)
Definition: wrlproc.cpp:1616
declares some compound types used for VRML
std::string GetError(void)
Definition: wrlproc.cpp:1960
bool DiscardList(void)
Definition: wrlproc.cpp:491
bool eof(void)
Definition: wrlproc.cpp:1954
bool ReadSFVec2f(WRLVEC2F &aSFVec2f)
Definition: wrlproc.cpp:1011
bool EatSpace(void)
Definition: wrlproc.cpp:191
bool getRawLine(void)
Definition: wrlproc.cpp:142
bool ReadMFString(std::vector< std::string > &aMFString)
Definition: wrlproc.cpp:1162
WRLVERSION m_fileVersion
Definition: wrlproc.h:114