← Back to team overview

kicad-developers team mailing list archive

Re: Sweet parser

 

On 4/4/11 3:59 PM, Dick Hollenbeck wrote:
On 03/25/2011 08:02 PM, Wayne Stambaugh wrote:
On 3/25/2011 4:42 PM, Dick Hollenbeck wrote:
-------------------------
When it comes to coding, we should be careful not to allow the schematic
editor to go beyond the bounds of the public Sweet API.  This should be
possible to enforce by keeping the sweet stuff as a separate DLL.
I still think the best way forward will be to have a LIB_SOURCE that simply
reads old lib files and provides PARTs through the LIB_SOURCE API, which
inherently means generating a sweet string for each part, on the fly.  This
provides a good model for any other type of library conversion facility.
Great idea.  This is one of the things I've been thinking about as well.
  Converting the existing libraries can always be done with external
conversion tools written in other languages like Python but asking user
to convert libraries this way is not very practical.

There is a swig binding that I started.  This means python or some other
language could be used to output SWEET strings, or read them, by calling
into the C++ work.

The SWIG work is not current with all the latest C++ changes, when I get all
the parsing and formatting done, I'll go back and bring the SWIG interface
up to current.

This is awesome, it makes things easier for other scripting languages to support. And so there is no fight in just one developer with his language(s) of choice.

As soon as I am done with the sweet parser, I will be doing all the Format()
functions which is the reverse of the Parse() operation, and from this code,
given that we can Format() into a STRING_FORMATTER, means we can generate
Sweet strings from the C++ structures.  These building blocks can be put
into any "converting" type of LIB_SOURCE.

Here is the output from the PART::Format() function using the shell script
generated
input test data run through the test program 'test_sch_lib_table':


(part tigers/ears/rev10
   (reference U?
     (effects (at 12 13)(font (size 0.7 1))(visible yes)))
   (value 22)
   (footprint SM0805)
   (datasheet http://favorite.pdf)
   (model Airplane)
   (property mWatts 12
     (effects (at 1 34)(font (size 0.5 1) italic bold)(visible no)))
   (keywords batcave einstein varistor)
   (line (line_width 1.5)
     (pts (xy 12 13)(xy 12 20)))
   (rectangle (start 4 5)(end 6 8)(line_width 2.3)(fill transparent))
   (circle (center 1 0)(radius 5)(line_width 2.1))
   (arc (pos 22 33)(radius 12)(start 2 4)(end 13 33)(line_width 2.3)(fill
filled))
   (bezier (line_width 2)
     (pts (xy 0 1)(xy 2 4)))
   (text "This is some text"
     (at 23 23)(justify left bottom)(visible yes)(fill filled)(font arial
(size 0.8 1.2)))
   (pin output line (at 7 8)(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)))
   (pin input line (at 8 8 0)(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)))
)


If anything looks long winded (overly verbose), the next couple of weeks
would be a good time to make those 11th hour changes.

'line_width' as a keyword name, seems a bit long to me, but its a minor deal.

For me this looks very very good, far better than XML. This is just the UNIX KISS approach to save settings and work to a harddisk.

Overall, hopefully it still looks sweet.

Thank you for you effort!



References