<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
{mso-style-priority:99;
mso-style-link:"Plain Text Char";
margin:0in;
font-size:11.0pt;
font-family:"Calibri",sans-serif;
mso-ligatures:standardcontextual;}
span.PlainTextChar
{mso-style-name:"Plain Text Char";
mso-style-priority:99;
mso-style-link:"Plain Text";
font-family:"Calibri",sans-serif;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
/* List Definitions */
@list l0
{mso-list-id:537469928;
mso-list-type:hybrid;
mso-list-template-ids:1953760646 1214015002 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
{mso-level-start-at:3;
mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:.75in;
text-indent:-.25in;
font-family:Symbol;
mso-fareast-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@list l0:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:1.25in;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:1.75in;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:2.25in;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:2.75in;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:3.25in;
text-indent:-.25in;
font-family:Wingdings;}
@list l0:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:3.75in;
text-indent:-.25in;
font-family:Symbol;}
@list l0:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:4.25in;
text-indent:-.25in;
font-family:"Courier New";}
@list l0:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
margin-left:4.75in;
text-indent:-.25in;
font-family:Wingdings;}
@list l1
{mso-list-id:694618806;
mso-list-type:hybrid;
mso-list-template-ids:-576961138 67698713 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l1:level1
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level2
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level3
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1:level4
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level5
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level6
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l1:level7
{mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level8
{mso-level-number-format:alpha-lower;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;}
@list l1:level9
{mso-level-number-format:roman-lower;
mso-level-tab-stop:none;
mso-level-number-position:right;
text-indent:-9.0pt;}
@list l2
{mso-list-id:1122647962;
mso-list-type:hybrid;
mso-list-template-ids:-380471236 -1828808076 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l2:level1
{mso-level-start-at:16;
mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;
mso-fareast-font-family:Calibri;
mso-bidi-font-family:"Times New Roman";}
@list l2:level2
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l2:level3
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l2:level4
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l2:level5
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l2:level6
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
@list l2:level7
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Symbol;}
@list l2:level8
{mso-level-number-format:bullet;
mso-level-text:o;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:"Courier New";}
@list l2:level9
{mso-level-number-format:bullet;
mso-level-text:\F0A7;
mso-level-tab-stop:none;
mso-level-number-position:left;
text-indent:-.25in;
font-family:Wingdings;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoPlainText>Thanks for tackling one of the hardest issues John. Thanks for spot-on analysis Vince.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Recommendations to keep in mind:<o:p></o:p></p><ol style='margin-top:0in' start=1 type=a><li class=MsoPlainText style='mso-list:l1 level1 lfo2'>Be very precise about your use of single-quote and double-quote characters. Then your output is simple and correct.<o:p></o:p></li><li class=MsoPlainText style='mso-list:l1 level1 lfo2'>Slightly different handling rules for SFString and MFString values, based on Python [ list ] square brackets. <o:p></o:p></li><li class=MsoPlainText style='mso-list:l1 level1 lfo2'>Utility methods in x3d.py permit substituting a simple string for an MFString, but you have to be careful not to smash a list into a single value (as Vince points out).<o:p></o:p></li></ol><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Excerpt from<o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l2 level1 lfo1'><b><i><span style='font-size:12.0pt;font-family:"Times New Roman",serif;color:black;mso-ligatures:none'>X3D Example Archives: X3D4WA, X3D for Web Authors, Chapter 04 Viewing Navigation, Navigation Info Example</span></i></b><span style='font-size:8.0pt'><o:p></o:p></span></li><li class=MsoPlainText style='mso-list:l2 level1 lfo1'>https://www.x3dgraphics.com/examples/X3dForWebAuthors/Chapter04ViewingNavigation/NavigationInfoExampleIndex.html<o:p></o:p></li><li class=MsoPlainText style='mso-list:l2 level1 lfo1'>https://www.x3dgraphics.com/examples/X3dForWebAuthors/Chapter04ViewingNavigation/NavigationInfoExample.py<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Suggested python encoding excerpted with highlights, autogenerated:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText> # […]<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> Scene=Scene(<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> # Because these NavigationInfo nodes are here in the parent scene, the first one is bound at load time, and thus governs the active navigation modes <o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> # Note that an author can control what choices a user has available, and initial type selected, while the user can select among navigation choices from available options <o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> # Author TODO: Experiment by swapping order of these NavigationInfo nodes, first one is bound at load time <o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> children=[<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> WorldInfo(title='NavigationInfo.x3d'),<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> NavigationInfo(DEF='DEFAULT_EXAMINE_FIRST'),<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> NavigationInfo(DEF='FLY_FIRST',<span style='background:yellow;mso-highlight:yellow'>type=</span></span><b><span style='font-size:9.0pt;font-family:"Courier New";color:#ED7D31;background:yellow;mso-highlight:yellow;mso-ligatures:none'>'"FLY" "ANY"'</span></b><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'>),<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> NavigationInfo(DEF='SIT_TIGHT',<span style='background:yellow;mso-highlight:yellow'>type='"NONE"'</span>),<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> # Also note that this scene does not provide a way to select a different NavigationInfo node during run time <o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'> Inline(<span style='background:yellow;mso-highlight:yellow'>url=["../HelloWorld.x3d",<a href="https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/HelloWorld.x3d">https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/HelloWorld.x3d</a>,"../HelloWorld.wrl",</span></span><b><span style='font-size:9.0pt;font-family:"Courier New";color:#ED7D31;background:yellow;mso-highlight:yellow;mso-ligatures:none'><a href="https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/HelloWorld.wrl"><span style='color:#ED7D31'>https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/HelloWorld.wrl</span></a></span></b><span style='font-size:9.0pt;font-family:"Courier New";color:black;background:yellow;mso-highlight:yellow;mso-ligatures:none'>]</span><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'>)])<o:p></o:p></span></p><p class=MsoPlainText style='margin-left:.5in'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'>) # X3D model complete<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Checking on compilation and execution during unit tests:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='mso-list:l2 level1 lfo1'>https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/build.python.all.log.txt<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><span style='font-size:9.0pt'>===================================<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>create python:<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors/Chapter04ViewingNavigation//NavigationInfoExample.x3d processing with X3dToPython stylesheet...<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>C:\x3d-code\www.web3d.org\x3d\content\examples\X3dForWebAuthors/Chapter04ViewingNavigation//NavigationInfoExample.py self-validation tests...<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>validate python:<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>x3d.py package 4.0.64.0 loaded, have fun with X3D Graphics!<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>Self-test diagnostics for NavigationInfoExample.py:<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>meta info: Contained Inline scene has profile Immersive<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>Python-to-XML well-formed XML document test of XML output complete<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>Python-to-XML X3D 3.3 schema validation test of XML output complete<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>Python-to-VRML export of VRML output successful<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>Python-to-JSON export of JSON output successful (under development)<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>python NavigationInfoExample.py load and self-test diagnostics complete.<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt'>===================================<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>However am seeing two errors:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><ol style='margin-top:0in' start=4 type=a><li class=MsoPlainText style='mso-list:l1 level1 lfo2'>Looks like the example excerpt is helpful but also has two mistakes:<o:p></o:p></li></ol><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='margin-left:.25in;mso-list:l0 level1 lfo3'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'>NavigationInfo(DEF='FLY_FIRST',<span style='background:yellow;mso-highlight:yellow'>type='"FLY" "ANY"'</span>),</span><o:p></o:p></li></ul><p class=MsoPlainText style='margin-left:.75in'>should be <o:p></o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='margin-left:.25in;mso-list:l0 level1 lfo3'><span style='font-size:9.0pt;font-family:"Courier New";color:black;mso-ligatures:none'>NavigationInfo(DEF='FLY_FIRST',<span style='background:aqua;mso-highlight:aqua'>type=["FLY","ANY"]),</span></span><o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><ul style='margin-top:0in' type=disc><li class=MsoPlainText style='margin-left:.25in;mso-list:l0 level1 lfo3'>Last value in url MFString list is <b><span style='font-size:9.0pt;font-family:"Courier New";color:#ED7D31'>unquoted</span></b><span style='font-size:9.0pt;color:#ED7D31'> </span>(scroll way-way-way to the right to find it)<o:p></o:p></li></ul><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I will work on the <i>X3dToPython.xslt</i> conversion stylesheet to address these two conversion errors (be patient please).<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>all the best, Don<o:p></o:p></p><p class=MsoPlainText>-- <o:p></o:p></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>Don Brutzman Naval Postgraduate School, Code USW/Br brutzman@nps.edu<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>Watkins 270, MOVES Institute, Monterey CA 93943-5000 USA +1.831.656.2149<o:p></o:p></span></p><p class=MsoPlainText><span style='font-size:9.0pt;font-family:"Courier New"'>X3D graphics, virtual worlds, navy robotics https://faculty.nps.edu/brutzman<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----Original Message-----<br>From: x3d-public <x3d-public-bounces@web3d.org> On Behalf Of Vincent Marchetti<br>Sent: Wednesday, July 19, 2023 5:48 AM<br>To: John Carlson <yottzumm@gmail.com>; X3D-Public <x3d-public@web3d.org><br>Subject: Re: [x3d-public] MFString in python x3d.py</p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>> On Jul 19, 2023, at 5:40 AM, John Carlson <<a href="mailto:yottzumm@gmail.com"><span style='color:windowtext;text-decoration:none'>yottzumm@gmail.com</span></a>> wrote:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> First off, I realize x3d.py JSON is under development.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> I'm trying to output an MFString to JSON in x3d.py and I'm kind of stuck? I've been modifying x3d.py to JSON output, but I've spent way too much time on it and it's dang frustrating.<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> I have the code:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ImageTexture(url=["images/X3dJavaSceneAccessInterfaceSaiLibrary.png","<o:p></o:p></p><p class=MsoPlainText>> <a href="http://www.web3d.org/specifications/java/examples/images/X3dJavaSceneA"><span style='color:windowtext;text-decoration:none'>http://www.web3d.org/specifications/java/examples/images/X3dJavaSceneA</span></a><o:p></o:p></p><p class=MsoPlainText>> ccessInterfaceSaiLibrary.png"])<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> Don has:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> ImageTexture(url=["images/X3dJavaSceneAccessInterfaceSaiLibrary.png","<o:p></o:p></p><p class=MsoPlainText>> <a href="http://www.web3d.org/specifications/java/examples/images/X3dJavaSceneA"><span style='color:windowtext;text-decoration:none'>http://www.web3d.org/specifications/java/examples/images/X3dJavaSceneA</span></a><o:p></o:p></p><p class=MsoPlainText>> ccessInterfaceSaiLibrary.png"])<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Yes, those two declarations of the ImageTexture node are the same.<o:p></o:p></p><p class=MsoPlainText>Can you show what the resulting json encoding of this node is, and what problems are occurring with that encoding?<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>> The same, right?<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> I'm wondering if I should try this approach:<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText>> NavigationInfo(type="\"EXAMINE\" \"FLY\" \"ANY\""),<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I would recommend against this.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>This approach is mixing up the details of several different encodings at once.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The expression you have there, in particular the \" constructions, is going to be interpreted according to the rules of the Python Lexical parser https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals<o:p></o:p></p><p class=MsoPlainText>and, if done just right, gives you the single python string with value "EXAMINE""FLY""ANY"<o:p></o:p></p><p class=MsoPlainText>This string only works as to represent an MFString value, when used to form an XML attribute in the XML encoding of X3D. It has little to do with json.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>> John<o:p></o:p></p><p class=MsoPlainText>> <o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Vince Marchetti<o:p></o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>x3d-public mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:x3d-public@web3d.org"><span style='color:windowtext;text-decoration:none'>x3d-public@web3d.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org"><span style='color:windowtext;text-decoration:none'>http://web3d.org/mailman/listinfo/x3d-public_web3d.org</span></a><o:p></o:p></p></div></body></html>