Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
K
kicad-source-mirror
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Commits
Open sidebar
Elphel
kicad-source-mirror
Commits
5634bc33
Commit
5634bc33
authored
Oct 24, 2012
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
move PCB_PARSER into PCB_IO as a member
parent
484eb55a
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
64 additions
and
12 deletions
+64
-12
dsnlexer.h
include/dsnlexer.h
+4
-2
kicad_plugin.cpp
pcbnew/kicad_plugin.cpp
+14
-8
kicad_plugin.h
pcbnew/kicad_plugin.h
+4
-0
pcb_parser.cpp
pcbnew/pcb_parser.cpp
+9
-0
pcb_parser.h
pcbnew/pcb_parser.h
+33
-2
No files found.
include/dsnlexer.h
View file @
5634bc33
...
@@ -204,12 +204,14 @@ public:
...
@@ -204,12 +204,14 @@ public:
*
*
* @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
* @param aKeywordTable is an array of KEYWORDS holding \a aKeywordCount. This
* token table need not contain the lexer separators such as '(' ')', etc.
* token table need not contain the lexer separators such as '(' ')', etc.
*
* @param aKeywordCount is the count of tokens in aKeywordTable.
* @param aKeywordCount is the count of tokens in aKeywordTable.
*
* @param aLineReader is any subclassed instance of LINE_READER, such as
* @param aLineReader is any subclassed instance of LINE_READER, such as
* STRING_LINE_READER or FILE_LINE_READER.
* STRING_LINE_READER or FILE_LINE_READER.
No ownership is taken.
*/
*/
DSNLEXER
(
const
KEYWORD
*
aKeywordTable
,
unsigned
aKeywordCount
,
DSNLEXER
(
const
KEYWORD
*
aKeywordTable
,
unsigned
aKeywordCount
,
LINE_READER
*
aLineReader
);
LINE_READER
*
aLineReader
=
NULL
);
virtual
~
DSNLEXER
();
virtual
~
DSNLEXER
();
...
...
pcbnew/kicad_plugin.cpp
View file @
5634bc33
...
@@ -241,11 +241,12 @@ void FP_CACHE::Load()
...
@@ -241,11 +241,12 @@ void FP_CACHE::Load()
// reader now owns fp, will close on exception or return
// reader now owns fp, will close on exception or return
FILE_LINE_READER
reader
(
fp
,
fpFileName
);
FILE_LINE_READER
reader
(
fp
,
fpFileName
);
PCB_PARSER
parser
(
&
reader
);
m_owner
->
m_parser
->
SetLineReader
(
&
reader
);
std
::
string
name
=
TO_UTF8
(
fpFileName
);
std
::
string
name
=
TO_UTF8
(
fpFileName
);
m_modules
.
insert
(
name
,
new
FP_CACHE_ITEM
(
(
MODULE
*
)
parser
.
Parse
(),
fpFileName
)
);
m_modules
.
insert
(
name
,
new
FP_CACHE_ITEM
(
(
MODULE
*
)
m_owner
->
m_parser
->
Parse
(),
fpFileName
)
);
}
while
(
dir
.
GetNext
(
&
fpFileName
)
);
}
while
(
dir
.
GetNext
(
&
fpFileName
)
);
...
@@ -339,9 +340,9 @@ BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput ) throw( IO_ERR
...
@@ -339,9 +340,9 @@ BOARD_ITEM* PCB_IO::Parse( const wxString& aClipboardSourceInput ) throw( IO_ERR
STRING_LINE_READER
reader
(
input
,
wxT
(
"clipboard"
)
);
STRING_LINE_READER
reader
(
input
,
wxT
(
"clipboard"
)
);
PCB_PARSER
pars
er
(
&
reader
);
m_parser
->
SetLineRead
er
(
&
reader
);
return
parser
.
Parse
();
return
m_parser
->
Parse
();
}
}
...
@@ -1466,7 +1467,8 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
...
@@ -1466,7 +1467,8 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
PCB_IO
::
PCB_IO
()
:
PCB_IO
::
PCB_IO
()
:
m_cache
(
0
),
m_cache
(
0
),
m_ctl
(
0
)
m_ctl
(
0
),
m_parser
(
new
PCB_PARSER
()
)
{
{
init
(
0
);
init
(
0
);
m_out
=
&
m_sf
;
m_out
=
&
m_sf
;
...
@@ -1475,7 +1477,8 @@ PCB_IO::PCB_IO() :
...
@@ -1475,7 +1477,8 @@ PCB_IO::PCB_IO() :
PCB_IO
::
PCB_IO
(
int
aControlFlags
)
:
PCB_IO
::
PCB_IO
(
int
aControlFlags
)
:
m_cache
(
0
),
m_cache
(
0
),
m_ctl
(
aControlFlags
)
m_ctl
(
aControlFlags
),
m_parser
(
new
PCB_PARSER
()
)
{
{
init
(
0
);
init
(
0
);
m_out
=
&
m_sf
;
m_out
=
&
m_sf
;
...
@@ -1485,6 +1488,7 @@ PCB_IO::PCB_IO( int aControlFlags ) :
...
@@ -1485,6 +1488,7 @@ PCB_IO::PCB_IO( int aControlFlags ) :
PCB_IO
::~
PCB_IO
()
PCB_IO
::~
PCB_IO
()
{
{
delete
m_cache
;
delete
m_cache
;
delete
m_parser
;
}
}
...
@@ -1499,9 +1503,11 @@ BOARD* PCB_IO::Load( const wxString& aFileName, BOARD* aAppendToMe, PROPERTIES*
...
@@ -1499,9 +1503,11 @@ BOARD* PCB_IO::Load( const wxString& aFileName, BOARD* aAppendToMe, PROPERTIES*
}
}
FILE_LINE_READER
reader
(
file
.
fp
(),
aFileName
);
FILE_LINE_READER
reader
(
file
.
fp
(),
aFileName
);
PCB_PARSER
parser
(
&
reader
,
aAppendToMe
);
BOARD
*
board
=
dynamic_cast
<
BOARD
*>
(
parser
.
Parse
()
);
m_parser
->
SetLineReader
(
&
reader
);
m_parser
->
SetBoard
(
aAppendToMe
);
BOARD
*
board
=
dynamic_cast
<
BOARD
*>
(
m_parser
->
Parse
()
);
wxASSERT
(
board
);
wxASSERT
(
board
);
// Give the filename to the board if it's new
// Give the filename to the board if it's new
...
...
pcbnew/kicad_plugin.h
View file @
5634bc33
...
@@ -30,6 +30,7 @@
...
@@ -30,6 +30,7 @@
class
BOARD
;
class
BOARD
;
class
BOARD_ITEM
;
class
BOARD_ITEM
;
class
FP_CACHE
;
class
FP_CACHE
;
class
PCB_PARSER
;
/** Current s-expression file format version. 2 was the last legacy format version. */
/** Current s-expression file format version. 2 was the last legacy format version. */
...
@@ -47,6 +48,8 @@ class FP_CACHE;
...
@@ -47,6 +48,8 @@ class FP_CACHE;
*/
*/
class
PCB_IO
:
public
PLUGIN
class
PCB_IO
:
public
PLUGIN
{
{
friend
class
FP_CACHE
;
public
:
public
:
...
@@ -133,6 +136,7 @@ protected:
...
@@ -133,6 +136,7 @@ protected:
STRING_FORMATTER
m_sf
;
STRING_FORMATTER
m_sf
;
OUTPUTFORMATTER
*
m_out
;
///< output any Format()s to this, no ownership
OUTPUTFORMATTER
*
m_out
;
///< output any Format()s to this, no ownership
int
m_ctl
;
int
m_ctl
;
PCB_PARSER
*
m_parser
;
private
:
private
:
...
...
pcbnew/pcb_parser.cpp
View file @
5634bc33
...
@@ -51,6 +51,15 @@
...
@@ -51,6 +51,15 @@
using
namespace
std
;
using
namespace
std
;
void
PCB_PARSER
::
init
()
{
m_layerMap
.
clear
();
// @todo add default layernames here.
}
double
PCB_PARSER
::
parseDouble
()
throw
(
IO_ERROR
)
double
PCB_PARSER
::
parseDouble
()
throw
(
IO_ERROR
)
{
{
char
*
tmp
;
char
*
tmp
;
...
...
pcbnew/pcb_parser.h
View file @
5634bc33
...
@@ -66,6 +66,15 @@ class PCB_PARSER : public PCB_LEXER
...
@@ -66,6 +66,15 @@ class PCB_PARSER : public PCB_LEXER
BOARD
*
m_board
;
BOARD
*
m_board
;
LAYER_HASH_MAP
m_layerMap
;
//< Map layer name to it's index saved in BOARD::m_Layer.
LAYER_HASH_MAP
m_layerMap
;
//< Map layer name to it's index saved in BOARD::m_Layer.
/**
* Function init
* clears and re-establishes m_layerMap with the default layer names.
* m_layerMap will have some of its entries overwritten whenever a (new) board
* is encountered.
*/
void
init
();
void
parseHeader
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parseHeader
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parseGeneralSection
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parseGeneralSection
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parsePAGE_INFO
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
parsePAGE_INFO
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
...
@@ -204,11 +213,33 @@ class PCB_PARSER : public PCB_LEXER
...
@@ -204,11 +213,33 @@ class PCB_PARSER : public PCB_LEXER
bool
parseBool
()
throw
(
PARSE_ERROR
);
bool
parseBool
()
throw
(
PARSE_ERROR
);
public
:
public
:
PCB_PARSER
(
LINE_READER
*
aReader
,
BOARD
*
aBoard
=
NULL
)
:
PCB_PARSER
(
LINE_READER
*
aReader
=
NULL
)
:
PCB_LEXER
(
aReader
),
PCB_LEXER
(
aReader
),
m_board
(
aBoard
)
m_board
(
0
)
{
}
/**
* Functoin SetLineReader
* sets @a aLineReader into the parser, and returns the previous one, if any.
* @param aReader is what to read from for tokens, no ownership is received.
* @return LINE_READER* - previous LINE_READER or NULL if none.
*/
LINE_READER
*
SetLineReader
(
LINE_READER
*
aReader
)
{
LINE_READER
*
ret
=
PopReader
();
PushReader
(
aReader
);
return
ret
;
}
void
SetBoard
(
BOARD
*
aBoard
)
{
{
init
();
m_board
=
aBoard
;
}
}
BOARD_ITEM
*
Parse
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
BOARD_ITEM
*
Parse
()
throw
(
IO_ERROR
,
PARSE_ERROR
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment