swankguy I need a way to save the state of the Swank Canvas. Because I am also rendering information on the canvas that is not just simple canvas items I wanted a way to save the current content that was not just a text file of Tcl commands, or a Tcl array, but that would allow additional information and storage of multiple canvases. I'm working on code that will export/import the canvas as an XML file. The format is influenced by that for SVG, but uses a style consistent with the Tk/Swank canvas. This is definitely a work in progress that if continued will ultimately end up with a DTD or a schema (see A little XML Schema validator.
There is a lot of relevant discussion about ways of saving Tcl related information at Techniques for reading and writing application configuration files including a discussion of using XML files.
Here is example output from a script that saves a canvas.
<?xml version="1.0"?> <canvas width="1000" height="800"> <line coords="130.0 50.0 160.0 80.0 190.0 50.0" fill="red" smooth="5" dash="" dashphase="0.0" width="4.0" rotate="45.0000012522" shear="0.0 0.0" tags="" state="normal" node="" transformer="" capstyle="projecting" joinstyle="miter" arrow="none" arrowshape="10.0 20.0 8.0" endstyle="arrow" startstyle="square"/> <line coords="130.0 150.0 180.0 150.0" fill="black" smooth="" dash="6 4 2 4 2 4" dashphase="0.0" width="1.0" rotate="0.0" shear="0.0 0.0" tags="" state="normal" node="" transformer="" capstyle="projecting" joinstyle="miter" arrow="none" arrowshape="8.0 10.0 3.0" endstyle="none" startstyle="none"/> <line coords="50.0 250.0 80.0 280.0 110.0 250.0" fill="black" smooth="" dash="" dashphase="0.0" width="1.0" rotate="0.0" shear="0.0 0.0" tags="" state="normal" node="" transformer="" capstyle="projecting" joinstyle="miter" arrow="none" arrowshape="8.0 10.0 3.0" endstyle="none" startstyle="none"/> <symbols coords="50.0 350.0 80.0 380.0 110.0 350.0" symbol="cross" radius="2.0" rotate="0.0" shear="0.0 0.0" tags="" state="normal" node="" transformer=""/> <rectangle coords="50.0 550.0 90.0 590.0" width="1.0" texture="" gradient="" fill="" outline="black" tags="" transformer="" rotate="0.0" shear="0.0 0.0" state="normal" node=""> <text textcolor="black" anchor="sw" font=""/> </rectangle> <rectangle coords="130.0 550.0 170.0 590.0" width="4.0" texture="" gradient="" fill="red" outline="blue" tags="" transformer="" rotate="45.0000012522" shear="0.0 0.0" state="normal" node=""> <text textcolor="black" anchor="sw" font=""/> </rectangle> <rectangle coords="130.0 650.0 170.0 690.0" width="1.0" texture="" gradient="" fill="red" outline="black" tags="" transformer="" rotate="0.0" shear="0.0 0.0" state="normal" node=""> <text textcolor="blue" anchor="c" font="Helvetica 16">Hello</text> </rectangle> <oval coords="50.0 750.0 90.0 770.0" fill="" outline="black" texture="" gradient="" rotate="0.0" shear="0.0 0.0" state="normal" tags="" width="1.0" node="" transformer=""> <text textcolor="black" anchor="sw" font=""/> </oval> <oval coords="130.0 750.0 170.0 770.0" fill="red" outline="blue" texture="" gradient="" rotate="45.0000012522" shear="0.0 0.0" state="normal" tags="" width="4.0" node="" transformer=""> <text textcolor="black" anchor="sw" font=""/> </oval> <arc coords="50.0 850.0 90.0 890.0" extent="90.0" start="0.0" style="arc" dash="" dashphase="0.0" fill="" outline="black" state="normal" rotate="0.0" shear="0.0 0.0" tags="" transformer="" width="1.0" node=""/> <polygon coords="130.0 950.0 160.0 980.0 190.0 950.0" dash="." dashphase="0.0" width="4.0" fill="red" outline="blue" rotate="45.0000012522" shear="0.0 0.0" tags="" state="normal" node="" transformer=""/> <segments coords="50.0 1050.0 60.0 1080.0 70.0 1080.0 80.0 1050.0 40.0 1060.0 100.0 1060.0" dash="" dashphase="0.0" width="1.0" fill="" outline="black" rotate="0.0" shear="0.0 0.0" tags="" state="normal" node="" transformer=""/> </canvas>