Commit 115d1adb authored by Dick Hollenbeck's avatar Dick Hollenbeck

more sweet parser & beginnings of Format()ing

parent 5b0e60e6
......@@ -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
......
......@@ -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
......@@ -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 )
{
......
This diff is collapsed.
......@@ -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:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment