<div dir="ltr">On Wed, Jun 6, 2018 at 7:38 PM, Joseph D Williams <span dir="ltr"><<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><p class="MsoNormal"> </p><div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0in 0in 0in"><p class="MsoNormal" style="border:none;padding:0in"><b>From: </b><a href="mailto:andreasplesch@gmail.com" target="_blank">Andreas Plesch</a><br><b>Sent: </b>Wednesday, June 6, 2018 4:05 PM<br><b>To: </b><a href="mailto:joedwil@earthlink.net" target="_blank">Joseph D Williams</a><br><b>Cc: </b><a href="mailto:x3d-public@web3d.org" target="_blank">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] X3D Regex</p></div><p class="MsoNormal"> </p><div><div><div><p class="MsoNormal">On Wed, Jun 6, 2018 at 4:51 PM, Joseph D Williams <<a href="mailto:joedwil@earthlink.net" target="_blank">joedwil@earthlink.net</a>> wrote: <br></p></div></div></div><p class="MsoNormal">HI,</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal"> </p><div style="border:none;border-top:solid windowtext 1.0pt;padding:3.0pt 0in 0in 0in;border-color:currentcolor currentcolor"><p class="MsoNormal"><b>From: </b><a href="mailto:andreasplesch@gmail.com" target="_blank">Andreas Plesch</a><br><b>Sent: </b>Wednesday, June 6, 2018 10:39 AM<br><b>To: </b><a href="mailto:x3d-public@web3d.org" target="_blank">X3D Graphics public mailing list</a><br><b>Subject: </b>Re: [x3d-public] X3D Regex</p></div><p class="MsoNormal"> </p><p class="MsoNormal">> Date: Wed, 6 Jun 2018 09:23:09 -0700</p><p class="MsoNormal">> From: Don Brutzman <<a href="mailto:brutzman@nps.edu" target="_blank">brutzman@nps.edu</a>></p><p class="MsoNormal">> To: X3D Graphics Working Group <<a href="mailto:x3d@web3d.org" target="_blank">x3d@web3d.org</a>></p><p class="MsoNormal">> Cc: X3D Graphics public mailing list <<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a>>, "Humanoid</p><p class="MsoNormal">>         Animation (H-Anim) Working Group" <<a href="mailto:h-anim@web3d.org" target="_blank">h-anim@web3d.org</a>></p><p class="MsoNormal">> Subject: [x3d-public] X3D teleconference 5 JUN 2018 minutes: HAnim</p><p class="MsoNormal">>         DIS, X3D Regex, Web3D 2018 and X3Dv4</p><p class="MsoNormal">> </p><p class="MsoNormal">...</p><p class="MsoNormal">>         X3D Regular Expressions (regexes)</p><p class="MsoNormal">>         <a href="http://www.web3d.org/specifications/X3dRegularExpressions.html" target="_blank">http://www.web3d.org/<wbr>specifications/<wbr>X3dRegularExpressions.html</a></p><p class="MsoNormal">> </p><p class="MsoNormal">> Vince reports that MFInt32 problem stack-overflow error still remains when running X3D Schematron locally.  He will post the abridged example that is still failing, hopefully that will help our test efforts.</p><p class="MsoNormal">> </p><p class="MsoNormal">> MFInt32 regex pattern:</p><p class="MsoNormal">> </p><p class="MsoNormal">>         ((\+|\-)?(0|[1-9][0-9]*)?( )?(,)?( )?)*</p><p class="MsoNormal">>         <a href="http://www.web3d.org/specifications/X3dRegularExpressions.html#MFInt32" target="_blank">http://www.web3d.org/<wbr>specifications/<wbr>X3dRegularExpressions.html#<wbr>MFInt32</a></p><p class="MsoNormal"> </p><p class="MsoNormal">>> I am looking at this regex and have a few questions.</p><p class="MsoNormal"> </p><p class="MsoNormal">>> All groups are optional, so it seems to also match an empty string "".</p><p class="MsoNormal">>> Perhaps not a problem, or even intentional.</p><p class="MsoNormal"> </p><p class="MsoNormal">Totally intentional. We need the ability to legally load the node with no content then later, prior to actually running the scene. Add some attr content.</p><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">>>> Yes, so the question is really if an empty string is a legal value. It may be intended as a signal to use the default value. </p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Fine observation. The default value may be the empty string.</p></div></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><div><p class="MsoNormal"><u></u> <u></u></p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">>> It matches a mix of commas and spaces, for example ",,,  , ,, ,,  ".</p><p class="MsoNormal">That is an error. Look at the entire range of X3DFields. I don’t think we want to allow a comma inside a tuple, just blank or comma between fields. </p><p class="MsoNormal">>> This does not look like an acceptable MFInt32 value.</p><p class="MsoNormal"> </p><p class="MsoNormal">Well, either space or comma is legal sep. Mix reads poorly but legal if number of </p></div></div></blockquote><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Not sure if there are no digits and just commas and spaces. "1,,2,,3" also matches. but I doubt that skipping entries is legal. </p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">Matches what,</p></div></div></div></blockquote><div><br></div><div>The regex in question here: 
((\+|\-)?(0|[1-9][0-9]*)?( )?(,)?( )?)*

<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><div><p class="MsoNormal"> there is a long list of X3DFOe;d forms and X3DArrayFIeld forms. Pretty sure that “,,” has got to be an error. However, look at implementations and see that most can be flexible to give the copy/paste or hand coder a break and at least not kill. . </p></div></div></div></blockquote><div><br></div><div>Yes, better be generous rather than too strict.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><div><p class="MsoNormal"> </p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">>> The second group (0|[1-9][0-9]*) : This is harder to understand. It</p><p class="MsoNormal">seems to want to address leading zeros. Why not just use ([0-9]*) ?</p><p class="MsoNormal">Using <a href="https://regexr.com/" target="_blank">https://regexr.com/</a> and <a href="https://regex101.com/" target="_blank">https://regex101.com/</a> I could not come</p><p class="MsoNormal">up with a pattern where these expressions were not equivalent. What</p><p class="MsoNormal">would be an example where ([0-9]*) would not work ?</p><p class="MsoNormal"> </p><p class="MsoNormal">leading zero for decimal value?</p></div></div></blockquote><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">>>> [0-9]* matches 012 as well, so still looking for an example.</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">012 is the same as 12 so maybe intent is leading 0 in decimals</p></div></div></div></blockquote><div><br></div><div>Yes, but leading 0 do not require the full (0|[1-9][0-9]*) expression.Simply [0-9]* suffices. <br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><div><p class="MsoNormal">There are fields where a 0 is legal. Again, I think there is a regex for every X3D field and X3DArrayField type,</p></div></div></div></blockquote><div><br></div><div>I think we are still looking for a regex for SFImage.</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal"> </p><p class="MsoNormal">>> <a href="http://www.web3d.org/documents/specifications/19776-1/V3.3/Part01/EncodingOfFields.html#SFInt32" target="_blank">http://www.web3d.org/<wbr>documents/specifications/<wbr>19776-1/V3.3/Part01/<wbr>EncodingOfFields.html#SFInt32</a></p><p class="MsoNormal">allows hexadecimal values, using 0x prefix. I have never seen this but</p><p class="MsoNormal">the regex would not match, eg. produces a false negative.</p><p class="MsoNormal"> </p><p class="MsoNormal">Looks like hex needs better regex. </p><p class="MsoNormal"> </p></div></div></blockquote><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Tempted to give it a try, starting with SFInt32:</p></div><div><p class="MsoNormal">/[ \t]*[-|+]?((0x([0-9]|[a-f]|[A-<wbr>F])+)|[0-9]*)[ \t]*/</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Translation: optional whitespace followed by optional plus or minus signs followed by </p></div><div><p class="MsoNormal">either 0x followed by a at least one digit or a to f or A to F letter</p></div><div><p class="MsoNormal">or by zero or more digits</p></div><div><p class="MsoNormal">followed by white space.</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Is tab legal white space ? Is whitespace after the plus/minus sign allowed ? Hm, I guess so.</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">>>> Testing this regex shows it works pretty well. One issue that it matches "  +  " without any digits. One could require at least one digit but then the empty string does not match any more. So one could make the complete  regex optional:</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">>>> /([ \t]*[-|+]?[ \t]*((0x([0-9]|[a-f]|[A-F])+)|<wbr>[0-9]+)[ \t]*)?/</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">So, for this one, the correct answer is Either this regex or the empty string. Seems like we ought to be able to say that. Esp for MFs where the [] is signal for empty</p></div></div></div></blockquote><div><br></div><div>That the idea. To accommodate "" as empty array []. <br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">>>> How does that look for SFInt32 ? There is \d for digits and \s for white space but I am not sure how widely supported these are.</p></div><div><p class="MsoNormal">>>> /(\s*[-|+]?\s*((0x(\d|[a-f]|[<wbr>A-F])+)|\d+)\s*)?/</p></div><div><p class="MsoNormal"><u></u> <u></u></p></div><div><p class="MsoNormal">Has any toolmaker shown their regex? I don’t know what is the spec for ww3regex.</p></div></div></div></blockquote><div><br></div><div>I do not think w3 deals with regexes directly. Javascript does and has \s and \d classes.</div><div><br></div><div>Given the SFInt32 regex. for MFInt32 it ought to possible to say : this regex followed by an optional comma, all matched at least 0 times:<br></div><div>
/(\s*[-|+]?\s*((0x(\d|[a-f]|[<wbr>A-F])+)|\d+)\s*,?)*/

<br></div><div><br></div><div>Testing looks good ! Let me nominate above a better regex for MFInt32,</div><div><br></div><div>-Andreas<br></div><div><br></div><div>Best, Andreas<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div link="blue" vlink="#954F72" lang="EN-US"><div class="m_8584165696523228263WordSection1"><div><p class="MsoNormal"> </p></div><blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in"><div><div><p class="MsoNormal">>> -Andreas</p><p class="MsoNormal"> </p><p class="MsoNormal">Thanks and Best, </p><p class="MsoNormal">Joe</p><p class="MsoNormal"><u></u> <u></u></p><p class="MsoNormal">This mail thing I have gets lost in the processing very easy</p><p class="MsoNormal"> </p><p class="MsoNormal">-- </p><p class="MsoNormal">Andreas Plesch</p><p class="MsoNormal">Waltham, MA 02453</p><p class="MsoNormal"> </p><p class="MsoNormal">______________________________<wbr>_________________</p><p class="MsoNormal">x3d-public mailing list</p><p class="MsoNormal"><a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a></p><p class="MsoNormal"><a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" target="_blank">http://web3d.org/mailman/<wbr>listinfo/x3d-public_web3d.org</a></p><p class="MsoNormal"> </p></div></div></blockquote><p class="MsoNormal"><br><br clear="all"><br>-- </p><p class="MsoNormal">Andreas Plesch<br>Waltham, MA 02453</p><p class="MsoNormal"><u></u> <u></u></p></div></div></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>Andreas Plesch<br>Waltham, MA 02453</div></div></div>
</div></div>