Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.buildPageTable
on buildPageTable (adrObject, adrPageTable=@websites.["#data"], templateName=nil) { <<Thu, Nov 28, 1996 at 6:09:18 AM by DW local (flPreview = false, pc = file.getPathChar ()); if defined (html.data.flPreview) { //See html.commands.previewPage, 5.0 11/29/97 DW flPreview = html.data.flPreview; adrPageTable^.flPreview = flPreview; try {delete (@html.data.flPreview)}}; adrPageTable^.adrObject = adrObject; adrPageTable^.indirectTemplate = true; <<4.1 on buildTable (adrObject, adrPageTable) { local (nomad = parentOf (adrObject^), subdirpath = ""); on addItemToPageTable (adr) { <<adr points to an attribute local (name = nameOf (adr^)); if name beginsWith "#" { name = string.delete (name, 1, 1)}; if not defined (adrPageTable^.[name]) { local (lowername = string.lower (name)); local (objecttype = typeOf (adr^)); case objecttype { outlinetype; tabletype { if lowername == "prefs" { local (i); for i = 1 to sizeOf (adr^) { addItemToPageTable (@adr^ [i])}} else { adrPageTable^.[name] = adr}}} else { adrPageTable^.[name] = string (adr^)}; if lowername == "ftpsite" { adrPageTable^.subDirectoryPath = subdirpath; adrPageTable^.adrSiteRootTable = nomad}; <<4.2 if lowername == "template" { <<4.1, 4.2 if (objecttype == wptexttype) or (objecttype == outlinetype) { <<Wed, Nov 20, 1996 at 7:58:21 AM by DW -- allow outlines to be templates adrPageTable^.indirectTemplate = false; if objecttype == outlinetype { <<dialog.alert (name) //debugging <<scratchpad.adr = adr //debugging adrPageTable^.[name] = adr^}}}}; return (true)}; loop { <<pop out to the root looking for #directives local (i); if nomad == nil or nomad == @root { break}; for i = 1 to sizeOf (nomad^) { if nameOf (nomad^ [i]) beginsWith "#" { addItemToPageTable (@nomad^ [i])}}; if defined (nomad^.tools) { addItemToPageTable (@nomad^.tools)}; if defined (nomad^.glossary) { addItemToPageTable (@nomad^.glossary)}; subdirpath = nameOf (nomad^) + pc + subdirpath; nomad = parentOf (nomad^)}}; on kernelcall (adrObject, adrPageTable) { kernel (html.buildpagetable)}; if html.getPref ("useKernelCode", adrPageTable) { kernelcall (adrObject, adrPageTable)} else { buildTable (adrObject, adrPageTable)}; <<Check for type of glossary and tools entries. <<They should be addresses pointing to tables. <<This is necessary because glossary and tools tables may not have a leading # character. bundle { on checkValue (name) { if typeOf (adrPageTable^.[name]) == addressType { if typeOf (adrPageTable^.[name]^) == tableType { return}}; //it's fine, return local (nomad = adrPageTable^.adrObject); loop { nomad = parentOf (nomad^); if nomad == nil or nomad == @root { //set default values adrPageTable^.[name] = @websites.["#" + name]; break}; if defined (nomad^.[name]) { if typeOf (nomad^.[name]) == tableType { adrPageTable^.[name] = @nomad^.[name]; return}; if typeOf (nomad^.[name]) == addressType { if typeOf (nomad^.[name]^) == tableType { adrPageTable^.[name] = nomad^.[name]; return}}}}}; checkValue ("tools"); checkValue ("glossary")}; <<Check if we're running inside the website framework responder. if html.inResponder (adrPageTable) { table.assign (@adrPageTable^.fileExtension, ".wsf")}; <<make sure ftpSite, template, title etc are set to something if not defined (adrPageTable^.ftpSite) { //must be set to something try { adrPageTable^.ftpSite = nameOf (user.html.sites.default)} else { adrPageTable^.ftpSite = nameOf (user.html.sites [1])}}; if not defined (adrPageTable^.template) { //must be set to something adrPageTable^.template = html.getPref ("defaultTemplate", adrPageTable)}; //new in 4.1 if not defined (adrPageTable^.title) { //must be set to something adrPageTable^.title = string (adrObject)}; if not defined (adrPageTable^.subDirectoryPath) { //must be set to something adrPageTable^.subDirectoryPath = ""}; <<Scalable content: support for named templates. if templateName != nil { //was an alternate template specified? <<Saturday, May 30, 1998 at 4:11:52 PM by PBS adrPageTable^.indirectTemplate = true; table.assign (@adrPageTable^.template, templateName)}; local (adrSiteTable = html.getSiteTable (adrPageTable)); bundle { //add name of current file writer <<PBS 4/15/98 local (method); if flPreview { method = "file"} else { try {method = adrSiteTable^.method}; try {method = adrSiteTable^.[templateName].method}; if method == nil { //backward compatibility method = "file"; try { if not adrSiteTable^.isLocal { method = "ftp"}}}}; adrPageTable^.fileWriter = method}; if not defined (adrPageTable^.fname) { adrPageTable^.fname = html.getFileName (nameOf (adrObject^), adrPageTable)}; <<4.0.1 bundle { //4.2, set f if not defined (adrSiteTable^) { scriptError ("Site table is missing at \"" + adrSiteTable + "\".")}; local (folder = html.getSiteFolder (adrPageTable)); adrPageTable^.f = folder + adrPageTable^.subDirectoryPath + adrPageTable^.fname; if not defined (adrPageTable^.requestHeaders) { //PBS 12/3/98 <<Don't create the folders if this is a dynamic page. file.sureFilePath (adrPageTable^.f)}}; bundle { //set url local (url = adrSiteTable^.url); try {url = adrSiteTable^.[templateName].url}; try { string.urlSplit (url)} //error if it's not a complete URL else { url = "http://" + url}; if not (url endsWith "/") { //check for trailing slash -- PBS 4/24/98 url = url + "/"}; url = url + string.replaceall (adrPageTable^.subDirectoryPath, pc, "/"); url = url + adrPageTable^.fname; adrPageTable^.url = url}; 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.