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
5b0e60e6
Commit
5b0e60e6
authored
Mar 27, 2011
by
Dick Hollenbeck
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
more free software, sweet parser nearing completion
parent
137d1329
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
456 additions
and
105 deletions
+456
-105
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
+59
-12
sch_part.cpp
new/sch_part.cpp
+11
-2
sch_part.h
new/sch_part.h
+94
-29
sch_sweet_parser.cpp
new/sch_sweet_parser.cpp
+281
-58
sch_sweet_parser.h
new/sch_sweet_parser.h
+9
-2
sweet.keywords
new/sweet.keywords
+2
-2
No files found.
new/eeschema_part_sexpr_format_EN.odt
View file @
5b0e60e6
No preview for this file type
new/make-dir-lib-source-test-data.sh
View file @
5b0e60e6
...
@@ -8,17 +8,58 @@ PARTS="eyes ears feet"
...
@@ -8,17 +8,58 @@ PARTS="eyes ears feet"
REVS
=
"rev1 rev5 rev10"
REVS
=
"rev1 rev5 rev10"
LINE
=
"(line (pts (xy 12 13)(xy 12 20))(line_width 1.5))"
RECT
=
"(rectangle (start 4 5)(end 6 8)(line_width 2.3)(fill transparent))"
CIRCLE
=
"(circle (center 1 0)(radius 5)(line_width 2.1)(fill none))"
ARC
=
"(arc (pos 22 33)(radius 12)(start 2 4)(end 13 33)(line_width 2.3)(fill filled))"
BEZIER
=
"(bezier (fill none)(line_width 2.0)(pts (xy 0 1)(xy 2 4)))"
TEXT
=
"(text
\"
This is some text
\"
(at 23 23 90.0)(justify left bottom)(visible yes)(fill filled))"
PIN
=
"(pin input line (at 7 8 90.0)(length 2)(visible YES))"
REFERENCE
=
"
# add to pin
(reference U
# (name NAME (font [FONT] (size HEIGHT WIDTH) [ITALIC] [BOLD])(visible YES))
(effects (at 12 13 180)(font (size .7 1))(visible yes))
# (number NUMBER (font [FONT] (size HEIGHT WIDTH) [ITALIC] [BOLD] (visible YES))
)"
LINE
=
"
(line
(pts (xy 12 13)(xy 12 20))(line_width 1.5)
)"
RECT
=
"
(rectangle
(start 4 5)(end 6 8)(line_width 2.3)(fill transparent)
)"
CIRCLE
=
"
(circle
(center 1 0)(radius 5)(line_width 2.1)(fill none)
)"
ARC
=
"
(arc
(pos 22 33)(radius 12)(start 2 4)(end 13 33)(line_width 2.3)(fill filled)
)"
BEZIER
=
"
(bezier
(fill none)(line_width 2.0)(pts (xy 0 1)(xy 2 4))
)"
TEXT
=
"
(text
\"
This is some text
\"
(at 23 23 90.0)(justify left bottom)(visible yes)(fill filled)
(font arial (size .8 1.2))
)"
PIN1
=
"
(pin output line (at 7 8 90)(length 2)(visible yes)
(signal #WE (font (size 0.9 1.1) bold)(visible yes))
(padname A23 (font (size 0.9 1.1) italic bold) (visible yes))
)"
PIN2
=
"
(pin input line (at 8 8)(length 2)(visible yes)
(signal #WAIT (font (size 0.9 1.1) bold)(visible yes))
(padname A24 (font (size 0.9 1.1) italic bold) (visible yes))
)"
PROP1
=
"
(property mWatts 12
(effects (at 1 34 270)(font (size .5 1) italic bold)(visible no))
)"
for
C
in
${
CATEGORIES
}
;
do
for
C
in
${
CATEGORIES
}
;
do
...
@@ -28,24 +69,30 @@ for C in ${CATEGORIES}; do
...
@@ -28,24 +69,30 @@ for C in ${CATEGORIES}; do
for
P
in
${
PARTS
}
;
do
for
P
in
${
PARTS
}
;
do
for
R
in
${
REVS
}
;
do
for
R
in
${
REVS
}
;
do
echo
"(part
$C
/
$P
(value 22)(footprint SM0805)(model Airplane)
echo
"(part
$C
/
$P
(value 22)(footprint SM0805)(model Airplane)
$REFERENCE
$LINE
$LINE
$RECT
$RECT
$CIRCLE
$CIRCLE
$ARC
$ARC
$BEZIER
$BEZIER
$TEXT
$TEXT
$PIN
$PIN1
$PIN2
$PROP1
)"
>
$BASEDIR
/
$C
/
$P
.part.
$R
)"
>
$BASEDIR
/
$C
/
$P
.part.
$R
done
done
# also make the part without a rev:
# also make the part without a rev:
echo
"(part
$C
/
$P
(value 22)(footprint SM0805)(model Airplane)
echo
"(part
$C
/
$P
(value 22)(footprint SM0805)(model Airplane)
$REFERENCE
$LINE
$LINE
$RECT
$RECT
$CIRCLE
$CIRCLE
$ARC
$ARC
$BEZIER
$BEZIER
$TEXT
$TEXT
$PIN
$PIN1
$PIN2
$PROP1
)"
>
$BASEDIR
/
$C
/
$P
.part
)"
>
$BASEDIR
/
$C
/
$P
.part
done
done
done
done
...
...
new/sch_part.cpp
View file @
5b0e60e6
...
@@ -38,7 +38,12 @@ PART::PART( LIB* aOwner, const STRING& aPartNameAndRev ) :
...
@@ -38,7 +38,12 @@ PART::PART( LIB* aOwner, const STRING& aPartNameAndRev ) :
contains
(
0
),
contains
(
0
),
partNameAndRev
(
aPartNameAndRev
),
partNameAndRev
(
aPartNameAndRev
),
extends
(
0
),
extends
(
0
),
base
(
0
)
base
(
0
),
reference
(
this
,
wxT
(
"reference "
)
),
value
(
this
,
wxT
(
"value"
)
),
footprint
(
this
,
wxT
(
"footprint"
)
),
model
(
this
,
wxT
(
"model"
)
),
datasheet
(
this
,
wxT
(
"datasheet"
)
)
{
{
// Our goal is to have class LIB only instantiate what is needed, so print here
// Our goal is to have class LIB only instantiate what is needed, so print here
// what it is doing. It is the only class where PART can be instantiated.
// what it is doing. It is the only class where PART can be instantiated.
...
@@ -64,7 +69,11 @@ void PART::clear()
...
@@ -64,7 +69,11 @@ void PART::clear()
delete
*
it
;
delete
*
it
;
pins
.
clear
();
pins
.
clear
();
// @todo delete all properties
// delete non-mandatory properties I own, since their container will not destroy them:
for
(
PROPERTIES
::
iterator
it
=
properties
.
begin
();
it
!=
properties
.
end
();
++
it
)
delete
*
it
;
properties
.
clear
();
}
}
...
...
new/sch_part.h
View file @
5b0e60e6
...
@@ -41,6 +41,7 @@ namespace SCH {
...
@@ -41,6 +41,7 @@ namespace SCH {
class
PART
;
class
PART
;
class
SWEET_PARSER
;
class
SWEET_PARSER
;
class
PROPERTY
;
};
};
...
@@ -57,10 +58,12 @@ public:
...
@@ -57,10 +58,12 @@ public:
{}
{}
};
};
typedef
float
ANGLE
;
namespace
SCH
{
namespace
SCH
{
class
GR_
FONT
class
FONT
{
{
friend
class
PART
;
friend
class
PART
;
friend
class
SWEET_PARSER
;
friend
class
SWEET_PARSER
;
...
@@ -72,13 +75,32 @@ protected:
...
@@ -72,13 +75,32 @@ protected:
bool
bold
;
bool
bold
;
public
:
public
:
GR_
FONT
()
:
FONT
()
:
italic
(
false
),
italic
(
false
),
bold
(
false
)
bold
(
false
)
{}
{}
};
};
class
BASE_GRAPHIC
struct
TEXT_EFFECTS
{
POINT
pos
;
ANGLE
angle
;
FONT
font
;
bool
isVisible
;
PROPERTY
*
property
;
///< only used from a COMPONENT, specifies PROPERTY in PART
wxString
propName
;
///< only used from a COMPONENT, specifies PROPERTY in PART
TEXT_EFFECTS
()
:
angle
(
0
),
isVisible
(
false
),
property
(
0
)
{}
};
class
BASE_GRAPHIC
{
{
friend
class
PART
;
friend
class
PART
;
friend
class
SWEET_PARSER
;
friend
class
SWEET_PARSER
;
...
@@ -186,13 +208,15 @@ class GR_TEXT : public BASE_GRAPHIC
...
@@ -186,13 +208,15 @@ class GR_TEXT : public BASE_GRAPHIC
protected
:
protected
:
POINT
pos
;
POINT
pos
;
float
angle
;
ANGLE
angle
;
int
fillType
;
///< T_none, T_filled, or T_transparent
int
fillType
;
///< T_none, T_filled, or T_transparent
int
hjustify
;
///< T_center, T_right, or T_left
int
hjustify
;
///< T_center, T_right, or T_left
int
vjustify
;
///< T_center, T_top, or T_bottom
int
vjustify
;
///< T_center, T_top, or T_bottom
bool
isVisible
;
bool
isVisible
;
wxString
text
;
wxString
text
;
//
FONT font;
FONT
font
;
public
:
public
:
GR_TEXT
(
PART
*
aOwner
)
:
GR_TEXT
(
PART
*
aOwner
)
:
...
@@ -206,36 +230,71 @@ public:
...
@@ -206,36 +230,71 @@ public:
};
};
class
P
IN
:
public
BASE_GRAPHIC
class
P
ROPERTY
:
public
BASE_GRAPHIC
{
{
friend
class
PART
;
friend
class
PART
;
friend
class
SWEET_PARSER
;
friend
class
SWEET_PARSER
;
protected
:
protected
:
POINT
pos
;
PART
*
birthplace
;
///< at which PART in inheritance chain was this PROPERTY added
float
angle
;
wxString
name
;
int
connectionType
;
///< T_input, T_output, T_bidirectional, T_tristate, T_passive, T_unspecified,
wxString
text
;
///< T_power_in, T_power_out, T_open_collector, T_open_emitter, or T_unconnected.
TEXT_EFFECTS
effects
;
int
shape
;
///< T_none, T_line, T_inverted, T_clock, T_inverted_clk, T_input_low, T_clock_low,
///< T_falling_edge, T_non_logic.
public
:
int
length
;
///< length of pin in internal units
PROPERTY
(
PART
*
aOwner
,
const
wxChar
*
aName
=
wxT
(
""
)
)
:
wxString
name
;
BASE_GRAPHIC
(
aOwner
),
wxString
number
;
birthplace
(
aOwner
),
bool
nameIsVisible
;
///< name is visible
name
(
aName
)
bool
numIsVisible
;
///< number is visible
{}
bool
isVisible
;
///< pin is visible
};
struct
PINTEXT
{
wxString
text
;
FONT
font
;
bool
isVisible
;
PINTEXT
()
:
isVisible
(
true
)
{}
};
class
PIN
:
public
BASE_GRAPHIC
{
friend
class
PART
;
friend
class
SWEET_PARSER
;
public
:
public
:
PIN
(
PART
*
aOwner
)
:
PIN
(
PART
*
aOwner
)
:
BASE_GRAPHIC
(
aOwner
),
BASE_GRAPHIC
(
aOwner
),
birthplace
(
aOwner
),
angle
(
0
),
angle
(
0
),
connectionType
(
PR
::
T_input
),
connectionType
(
PR
::
T_input
),
shape
(
PR
::
T_line
),
shape
(
PR
::
T_line
),
length
(
0
),
length
(
0
),
nameIsVisible
(
true
),
numIsVisible
(
true
),
isVisible
(
true
)
isVisible
(
true
)
{}
{}
protected
:
PART
*
birthplace
;
///< at which PART in inheritance chain was this PIN added
POINT
pos
;
ANGLE
angle
;
PINTEXT
padname
;
PINTEXT
signal
;
int
connectionType
;
///< T_input, T_output, T_bidirectional, T_tristate, T_passive, T_unspecified,
///< T_power_in, T_power_out, T_open_collector, T_open_emitter, or T_unconnected.
int
shape
;
///< T_none, T_line, T_inverted, T_clock, T_inverted_clk, T_input_low, T_clock_low,
///< T_falling_edge, T_non_logic.
int
length
;
///< length of pin in internal units
bool
isVisible
;
///< pin is visible
};
};
...
@@ -249,6 +308,7 @@ namespace SCH {
...
@@ -249,6 +308,7 @@ namespace SCH {
typedef
std
::
vector
<
BASE_GRAPHIC
*
>
GRAPHICS
;
typedef
std
::
vector
<
BASE_GRAPHIC
*
>
GRAPHICS
;
typedef
std
::
vector
<
PIN
*
>
PINS
;
typedef
std
::
vector
<
PIN
*
>
PINS
;
typedef
std
::
vector
<
PROPERTY
*
>
PROPERTIES
;
class
LPID
;
class
LPID
;
class
SWEET_PARSER
;
class
SWEET_PARSER
;
...
@@ -306,12 +366,20 @@ protected: // not likely to have C++ descendants, but protected none-the-le
...
@@ -306,12 +366,20 @@ protected: // not likely to have C++ descendants, but protected none-the-le
/// actually becomes cached in RAM.
/// actually becomes cached in RAM.
STRING
body
;
STRING
body
;
// bool cachedRevisions; ///< allows lazy loading of revision of this same part name
// mandatory properties
PROPERTY
reference
;
///< prefix only, only components have full references
PROPERTY
value
;
PROPERTY
footprint
;
PROPERTY
model
;
PROPERTY
datasheet
;
//
3
separate lists for speed:
// separate lists for speed:
/// A property list.
/**
//PROPERTIES properties;
* Member properties
* holds the non-mandatory properties.
*/
PROPERTIES
properties
;
/**
/**
* Member graphics
* Member graphics
...
@@ -325,14 +393,9 @@ protected: // not likely to have C++ descendants, but protected none-the-le
...
@@ -325,14 +393,9 @@ protected: // not likely to have C++ descendants, but protected none-the-le
*/
*/
PINS
pins
;
PINS
pins
;
/// Alternate body forms.
/// Alternate body forms.
//ALTERNATES alternates;
//ALTERNATES alternates;
// mandatory properties
wxString
value
;
wxString
footprint
;
wxString
model
;
wxString
keywords
;
wxString
keywords
;
...
@@ -361,6 +424,7 @@ public:
...
@@ -361,6 +424,7 @@ public:
*/
*/
void
Parse
(
SWEET_PARSER
*
aParser
,
LIB_TABLE
*
aLibTable
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
void
Parse
(
SWEET_PARSER
*
aParser
,
LIB_TABLE
*
aLibTable
)
throw
(
IO_ERROR
,
PARSE_ERROR
);
/*
void SetValue( const wxString& aValue )
void SetValue( const wxString& aValue )
{
{
value = aValue;
value = aValue;
...
@@ -387,6 +451,7 @@ public:
...
@@ -387,6 +451,7 @@ public:
{
{
return model;
return model;
}
}
*/
/*
/*
void SetBody( const STR_UTF& aSExpression )
void SetBody( const STR_UTF& aSExpression )
...
...
new/sch_sweet_parser.cpp
View file @
5b0e60e6
This diff is collapsed.
Click to expand it.
new/sch_sweet_parser.h
View file @
5b0e60e6
...
@@ -44,7 +44,11 @@ class ARC;
...
@@ -44,7 +44,11 @@ class ARC;
class
BEZIER
;
class
BEZIER
;
class
GR_TEXT
;
class
GR_TEXT
;
class
PIN
;
class
PIN
;
class
GR_FONT
;
class
FONT
;
class
PROPERTY
;
struct
PINTEXT
;
struct
TEXT_EFFECTS
;
/**
/**
...
@@ -73,7 +77,10 @@ class SWEET_PARSER : public SWEET_LEXER
...
@@ -73,7 +77,10 @@ class SWEET_PARSER : public SWEET_LEXER
void
parsePin
(
PIN
*
me
);
void
parsePin
(
PIN
*
me
);
void
parseAt
(
POINT
*
pos
,
float
*
angle
);
void
parseAt
(
POINT
*
pos
,
float
*
angle
);
void
parseBool
(
bool
*
aBool
);
void
parseBool
(
bool
*
aBool
);
void
parseFont
(
GR_FONT
*
me
);
void
parseFont
(
FONT
*
me
);
void
parsePinText
(
PINTEXT
*
me
);
void
parseTextEffects
(
TEXT_EFFECTS
*
me
);
public
:
public
:
...
...
new/sweet.keywords
View file @
5b0e60e6
...
@@ -32,14 +32,13 @@ length
...
@@ -32,14 +32,13 @@ length
line
line
line_width
line_width
model
model
name
no
no
non_logic
non_logic
none
none
number
open_collector
open_collector
open_emitter
open_emitter
output
output
padname
part
part
passive
passive
pin
pin
...
@@ -61,6 +60,7 @@ reference
...
@@ -61,6 +60,7 @@ reference
right
right
route_alt_swap
route_alt_swap
route_pin_swap
route_pin_swap
signal
size
size
start
start
start_angle
start_angle
...
...
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