Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.fileWriters.odb.write
on write (adrData, path, type, creator, creationDate, adrPageTable, adrStorage) { <<This script is called whenever a file needs to be written somewhere. <<Parameters: <<adrData: this is the address of data the file should contain. <<path: path is a relative, /-delimited path. <<It's relative to the ftpSite^.folder. <<type: the file type. <<creator: the file creator. <<creationDate: should be the creation data of the file. <<adrPageTable: the address of the current page data table. <<This script doesn't have to write the file immediately -- <<it could defer writing until the shutdown script is called. <<Changes: <<Thu, Jun 3, 1999 at 10:21:35 PM by PBS <<Put brackets around elements in path, so table names like 1999 would become ["1999"]. <<Reworked the bundle that gets odbAddress from the ftpSite to avoid using try statements. local (adrFtpSite); local (objectName, adrItem); local (templateName = html.getCurrentTemplateName (adrPageTable)); on assureTablePath (s) { table.sureDatabaseOpen (s); local (pathList = string.parseAddress (s)); local (adr = @[pathList [1]]); local (i); if not defined (adr^) { new (tableType, adr)}; for i = 2 to sizeOf (pathList) - 1 { adr = @adr^.[pathList [i]]; if not defined (adr^) { new (tableType, adr)}}; return (adr)}; on getSuffix (s, chsep = '.') { local (i, suffix = ""); for i = sizeOf (s) downto 1 { local (ch = s [i]); if ch == chsep { break}; suffix = ch + suffix}; return (suffix)}; adrFtpSite = html.getSiteTable (adrPageTable); bundle { //get the odb address specified in the #ftpSite on setDest (adrOdbAddress) { if typeOf (adrOdbAddress^) == scriptType { adrItem = adrOdbAddress^ ()} else { adrItem = string (adrOdbAddress^)}}; if defined (adrFtpSite^.[templateName].odbAddress) { setDest (@adrFtpSite^.[templateName].odbAddress)} else { setDest (@adrFtpSite^.odbAddress)}}; objectName = getSuffix (path, '/'); if path contains "/" { path = string.popSuffix (path, '/'); <<Make brackets out of fields in path. PBS 6/3/99 local (ct = 1); local (oldPath = path); path = ""; loop { local (s = string.nthField (oldPath, '/', ct)); if s == "" { break}; s = "[\"" + s + "\"]"; path = path + "." + s; ct++}} else { path = ""}; path = string.replaceAll (path, "/", "."); path = path + ".[\"" + objectName + "\"]"; if not (path beginsWith ".") { path = "." + path}; adrItem = adrItem + path; assureTablePath (adrItem); if typeOf (adrData^) == stringType { wp.newTextObject (adrData^, adrItem)} else { try {delete (adrItem)}; adrItem^ = adrData^}; if not defined (adrStorage^.adrDatabase) { //save adrDatabase for shutdown script local (adrDatabase = string.parseAddress (adrItem)); adrDatabase = adrDatabase [1]; adrStorage^.adrDatabase = adrDatabase}; return (true)}
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.