Monday, November 08, 2010 at 12:07 AM.
system.verbs.builtins.xml.coercions.frontierValueToTaggedText
on frontierValueToTaggedText (adrFrontierValue, indentlevel) {
<<Thursday, November 11, 1999 at 2:27:22 AM by AR
<<Implemented as a kernel verb in Frontier 6.1.
<<Old code
<<on frontierValueToTaggedText (adrFrontierValue, indentlevel)
<<8/7/98; 7:49:10 PM by DW -- if it's a string, don't indent
<<the indentation becomes part of the string! not good...
<<see addValue for the implementation
<<Thu, 27 May 1999 22:02:21 GMT by AR and SMD
<<Previously, an error message was generated when you tried to convert a list object to tagged text which contained a table followed by a scalar value. This bug has been fixed.
<<local (xmltext = "")
<<on add (s)
<<xmltext = xmltext + string.filledstring ("\t", indentlevel) + s + "\r"
<<on addValue (adritem)
<<if typeof (adritem^) == stringtype
<<add ("<value>" + xml.coercions.frontierValueToTaggedText (adritem, indentlevel) + "</value>")
<<else
<<add ("<value>"); indentlevel++
<<add (xml.coercions.frontierValueToTaggedText (adritem, indentlevel))
<<add ("</value>"); indentlevel--
<<case typeOf (adrFrontierValue^)
<<listtype
<<local (item, ix)
<<add ("<array>"); indentlevel++
<<add ("<data>"); indentlevel++
<<for ix = 1 to sizeof (adrFrontierValue^) //Thu, 27 May 1999 22:02:21 GMT by AR
<<table.assign (@item, adrFrontierValue^[ix])
<<addValue (@item)
<<add ("</data>"); indentlevel--
<<add ("</array>"); indentlevel--
<<tabletype
<<local (i, ct = sizeof (adrFrontierValue^), adritem)
<<add ("<struct>"); indentlevel++
<<for i = 1 to ct
<<adritem = @adrFrontierValue^ [i]
<<add ("<member>"); indentlevel++
<<add ("<name>" + nameof (adritem^) + "</name>")
<<addValue (adritem)
<<add ("</member>"); indentlevel--
<<add ("</struct>"); indentlevel--
<<else
<<add (xml.valToString (adrFrontierValue^, indentlevel))
<<xmltext = string.popleading (xmltext, "\t")
<<xmltext = string.poptrailing (xmltext, "\r")
<<return (xmltext)
kernel (xml.frontiervaluetotaggedtext)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.