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
115d1adb
Commit
115d1adb
authored
Mar 28, 2011
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more sweet parser & beginnings of Format()ing
parent
5b0e60e6
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
346 additions
and
211 deletions
+346
-211
eeschema_part_sexpr_format_EN.odt
new/eeschema_part_sexpr_format_EN.odt
+0
-0
make-dir-lib-source-test-data.sh
new/make-dir-lib-source-test-data.sh
+5
-0
sch_part.cpp
new/sch_part.cpp
+66
-5
sch_part.h
new/sch_part.h
+37
-2
sch_sweet_parser.cpp
new/sch_sweet_parser.cpp
+227
-204
sch_sweet_parser.h
new/sch_sweet_parser.h
+11
-0
No files found.
new/eeschema_part_sexpr_format_EN.odt
View file @
115d1adb
No preview for this file type
new/make-dir-lib-source-test-data.sh
View file @
115d1adb
...
...
@@ -61,6 +61,9 @@ PROP1="
(effects (at 1 34 270)(font (size .5 1) italic bold)(visible no))
)"
KEYWORDS
=
"
(keywords varistor batcave einstein)"
for
C
in
${
CATEGORIES
}
;
do
...
...
@@ -79,6 +82,7 @@ for C in ${CATEGORIES}; do
$PIN1
$PIN2
$PROP1
$KEYWORDS
)"
>
$BASEDIR
/
$C
/
$P
.part.
$R
done
# also make the part without a rev:
...
...
@@ -93,6 +97,7 @@ for C in ${CATEGORIES}; do
$PIN1
$PIN2
$PROP1
$KEYWORDS
)"
>
$BASEDIR
/
$C
/
$P
.part
done
done
...
...
new/sch_part.cpp
View file @
115d1adb
...
...
@@ -28,7 +28,7 @@
#include <sch_sweet_parser.h>
#include <sch_lpid.h>
#include <sch_lib_table.h>
//#include <richio.h>
using
namespace
SCH
;
...
...
@@ -74,6 +74,11 @@ void PART::clear()
delete
*
it
;
properties
.
clear
();
keywords
.
clear
();
contains
=
0
;
// @todo clear the mandatory fields
}
...
...
@@ -120,12 +125,68 @@ void PART::Parse( SWEET_PARSER* aParser, LIB_TABLE* aTable ) throw( IO_ERROR, PA
}
#if 0 && defined(DEBUG)
void
PART
::
PropertyDelete
(
const
wxString
&
aPropertyName
)
throw
(
IO_ERROR
)
{
PROPERTIES
::
iterator
it
=
propertyFind
(
aPropertyName
);
if
(
it
==
properties
.
end
()
)
{
wxString
msg
;
msg
.
Printf
(
_
(
"Unable to find property: %s"
),
aPropertyName
.
GetData
()
);
THROW_IO_ERROR
(
msg
);
}
delete
*
it
;
properties
.
erase
(
it
);
return
;
}
PROPERTIES
::
iterator
PART
::
propertyFind
(
const
wxString
&
aPropertyName
)
{
PROPERTIES
::
iterator
it
;
for
(
it
=
properties
.
begin
();
it
!=
properties
.
end
();
++
it
)
if
(
(
*
it
)
->
name
==
aPropertyName
)
break
;
return
it
;
}
int main( int argc, char** argv
)
void
PART
::
Format
(
OUTPUTFORMATTER
*
out
,
int
indent
,
int
ctl
)
const
throw
(
IO_ERROR
)
{
return 0;
out
->
Print
(
indent
,
"(part %s"
,
partNameAndRev
.
c_str
()
);
if
(
extends
)
out
->
Print
(
0
,
" inherits %s"
,
extends
->
Format
().
c_str
()
);
out
->
Print
(
0
,
"
\n
"
);
/*
@todo
for( int i=0; i<MANDATORY_FIELDS; ++i )
{
}
*/
for
(
PROPERTIES
::
const_iterator
it
=
properties
.
begin
();
it
!=
properties
.
end
();
++
it
)
{
(
*
it
)
->
Format
(
out
,
indent
+
1
,
ctl
);
}
if
(
anchor
.
x
||
anchor
.
y
)
{
out
->
Print
(
indent
+
1
,
"(anchor (at %.6g %.6g))
\n
"
,
InternalToLogical
(
anchor
.
x
),
InternalToLogical
(
anchor
.
y
)
);
}
for
(
GRAPHICS
::
const_iterator
it
=
graphics
.
begin
();
it
!=
graphics
.
end
();
++
it
)
{
(
*
it
)
->
Format
(
out
,
indent
+
1
,
ctl
);
}
for
(
PINS
::
const_iterator
it
=
pins
.
begin
();
it
!=
pins
.
end
();
++
it
)
{
(
*
it
)
->
Format
(
out
,
indent
+
1
,
ctl
);
}
}
#endif
new/sch_part.h
View file @
115d1adb
...
...
@@ -34,8 +34,10 @@
#include <wx/gdicmn.h>
#include <deque>
#include <vector>
#include <set>
#include <sweet_lexer.h>
class
OUTPUTFORMATTER
;
namespace
SCH
{
...
...
@@ -114,6 +116,10 @@ public:
{}
virtual
~
BASE_GRAPHIC
()
{}
virtual
void
Format
(
OUTPUTFORMATTER
*
aOutputFormatter
,
int
aNestLevel
,
int
aControlBits
)
const
throw
(
IO_ERROR
)
{}
};
typedef
std
::
deque
<
POINT
>
POINTS
;
...
...
@@ -278,6 +284,11 @@ public:
isVisible
(
true
)
{}
/*
void Format( OUTPUTFORMATTER* aOutputFormatter, int aNestLevel, int aControlBits ) const
throw( IO_ERROR );
*/
protected
:
PART
*
birthplace
;
///< at which PART in inheritance chain was this PIN added
POINT
pos
;
...
...
@@ -309,6 +320,7 @@ namespace SCH {
typedef
std
::
vector
<
BASE_GRAPHIC
*
>
GRAPHICS
;
typedef
std
::
vector
<
PIN
*
>
PINS
;
typedef
std
::
vector
<
PROPERTY
*
>
PROPERTIES
;
typedef
std
::
set
<
wxString
>
KEYWORDS
;
class
LPID
;
class
SWEET_PARSER
;
...
...
@@ -347,6 +359,14 @@ protected: // not likely to have C++ descendants, but protected none-the-le
*/
void
inherit
(
const
PART
&
aBasePart
);
/**
* Function propertyFind
* searches for aPropertyName and returns a PROPERTIES::iterator which
* is the found item or properties.end() if not found.
*/
PROPERTIES
::
iterator
propertyFind
(
const
wxString
&
aPropertyName
);
POINT
anchor
;
//PART( LIB* aOwner );
...
...
@@ -396,14 +416,14 @@ protected: // not likely to have C++ descendants, but protected none-the-le
/// Alternate body forms.
//ALTERNATES alternates;
wxString
keywords
;
KEYWORDS
keywords
;
public
:
virtual
~
PART
();
PART
&
operator
=
(
const
PART
&
other
);
PART
&
operator
=
(
const
PART
&
other
);
/**
* Function Owner
...
...
@@ -424,6 +444,21 @@ public:
*/
void
Parse
(
SWEET_PARSER
*
aParser
,
LIB_TABLE
*
aLibTable
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
/**
* Function Format
* outputs this PART in UTF8 encoded s-expression format to @a aFormatter.
* @param aFormatter is the output sink to write to.
* @param aNestLevel is the initial indent level
* @param aControlBits are bit flags ORed together which control how the output
* is done.
*/
void
Format
(
OUTPUTFORMATTER
*
aFormatter
,
int
aNestLevel
,
int
aControlBits
=
0
)
const
throw
(
IO_ERROR
);
void
PropertyDelete
(
const
wxString
&
aPropertyName
)
throw
(
IO_ERROR
);
/*
void SetValue( const wxString& aValue )
{
...
...
new/sch_sweet_parser.cpp
View file @
115d1adb
...
...
@@ -34,7 +34,6 @@ using namespace PR;
#define MAX_INHERITANCE_NESTING 6 ///< max depth of inheritance, no problem going larger
#define INTERNAL_PER_LOGICAL 10000 ///< no. internal units per logical unit
/**
...
...
@@ -148,7 +147,7 @@ void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_E
// Caller may not have read the first two tokens out of the
// stream: T_LEFT and T_part, so ignore them if seen here.
// The 1st two tokens T_LEFT and T_part are then optional in the grammar.
if( (tok = NextTok() ) == T_LEFT )
if( (
tok = NextTok() ) == T_LEFT )
{
if( ( tok = NextTok() ) != T_part )
Expecting( T_part );
...
...
@@ -174,10 +173,8 @@ void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_E
for
(
;
tok
!=
T_RIGHT
;
tok
=
NextTok
()
)
{
if
(
tok
==
T_EOF
)
Unexpected
(
T_EOF
);
if
(
tok
==
T_LEFT
)
{
tok
=
NextTok
();
// because exceptions are thrown, any 'new' allocation has to be stored
...
...
@@ -369,6 +366,12 @@ void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_E
Expecting
(
") | effects"
);
break
;
case
T_property_del
:
NeedSYMBOLorNUMBER
();
me
->
PropertyDelete
(
FromUTF8
()
);
NeedRIGHT
();
break
;
case
T_pin
:
PIN
*
pin
;
pin
=
new
PIN
(
me
);
...
...
@@ -376,16 +379,15 @@ void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_E
parsePin
(
pin
);
break
;
/*
@todo
case
T_keywords
:
parseKeywords
(
me
);
break
;
case T_alternates:
break;
/*
@todo
case T_property_del:
// do we want to inherit alternates?
case T_alternates:
break;
case T_pin_merge:
...
...
@@ -403,7 +405,17 @@ void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_E
case T_route_pin_swap:
break;
*/
*/
}
}
else
{
switch
(
tok
)
{
default
:
Unexpected
(
tok
);
}
}
}
...
...
@@ -413,6 +425,21 @@ void SWEET_PARSER::Parse( PART* me, LIB_TABLE* aTable ) throw( IO_ERROR, PARSE_E
}
void
SWEET_PARSER
::
parseKeywords
(
PART
*
me
)
{
T
tok
;
while
(
(
tok
=
NextTok
()
)
!=
T_RIGHT
)
{
if
(
!
IsSymbol
(
tok
)
&&
tok
!=
T_NUMBER
)
Expecting
(
"symbol|number"
);
// just insert them, duplicates are silently removed and tossed.
me
->
keywords
.
insert
(
FromUTF8
()
);
}
}
void
SWEET_PARSER
::
parseFont
(
FONT
*
me
)
{
/*
...
...
@@ -436,7 +463,7 @@ void SWEET_PARSER::parseFont( FONT* me )
tok
=
NextTok
();
}
while
(
tok
!=
T_RIGHT
)
for
(
;
tok
!=
T_RIGHT
;
tok
=
NextTok
()
)
{
if
(
tok
==
T_LEFT
)
{
...
...
@@ -483,8 +510,6 @@ void SWEET_PARSER::parseFont( FONT* me )
Unexpected
(
"bold|italic"
);
}
}
tok
=
NextTok
();
}
}
...
...
@@ -681,7 +706,7 @@ void SWEET_PARSER::parseTextEffects( TEXT_EFFECTS* me )
/*
(effects [PROPERTY]
# Position requires
an
X and Y coordinates. Position coordinates can be
# Position requires X and Y coordinates. Position coordinates can be
# non-intergr. Angle is in degrees and defaults to 0 if not defined.
(at X Y [ANGLE])
...
...
@@ -709,7 +734,7 @@ void SWEET_PARSER::parseTextEffects( TEXT_EFFECTS* me )
tok
=
NextTok
();
}
while
(
tok
!=
T_RIGHT
)
for
(
;
tok
!=
T_RIGHT
;
tok
=
NextTok
()
)
{
if
(
tok
!=
T_LEFT
)
Expecting
(
T_LEFT
);
...
...
@@ -743,8 +768,6 @@ void SWEET_PARSER::parseTextEffects( TEXT_EFFECTS* me )
default
:
Expecting
(
"at|font|visible"
);
}
tok
=
NextTok
();
}
}
...
...
new/sch_sweet_parser.h
View file @
115d1adb
...
...
@@ -28,6 +28,16 @@
#include <utf8.h>
#include <sweet_lexer.h>
#define INTERNAL_PER_LOGICAL 10000 ///< no. internal units per logical unit
static
inline
double
InternalToLogical
(
int
aCoord
)
{
return
double
(
aCoord
)
/
INTERNAL_PER_LOGICAL
;
}
class
POINT
;
namespace
SCH
{
...
...
@@ -80,6 +90,7 @@ class SWEET_PARSER : public SWEET_LEXER
void
parseFont
(
FONT
*
me
);
void
parsePinText
(
PINTEXT
*
me
);
void
parseTextEffects
(
TEXT_EFFECTS
*
me
);
void
parseKeywords
(
PART
*
me
);
public
:
...
...
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