Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.search.client.buildSearchTable
on buildSearchTable (adrObject, adrSearchTable, adrSitesTable=nil) { <<Build a table containing the search preferences for this object. <<Params: <<adrObject is the address of the page. <<adrSearchTable is the address of the search table to build. <<adrSitesTable (optional) points to a table in config.mainResponder.search.sites to use. <<The search table contains: <<supportsIndexing: does this database support indexing? This value is the value from user.databases.[dbName].supportsIndexing. <<flIndexOnCheckIn: does this website want indexing turned on? <<addToIndex: XML-RPC procedure name for adding to an index. This comes from config.mainResponder.search, the sites table, or the #search table. <<restartIndex: XML-RPC procedure name for restarting a site index. <<domain: the domain name of the search engine server. <<port: the port number of the search engine server. <<siteName: the name of the site this page is in. <<siteUrl: the URL of the home page of this site. <<url: the url of this page. <<The search table may contain additional items or fewer items, it's not guaranteed to contain the above and the above only. local (adrUserTable, adrSearchDirectiveTable); local (dbPath); on copyPrefs (adrSource) { //copy preferences from a table into the search table <<Copy everything but subtables. if defined (adrSource^) { local (i); for i = 1 to sizeOf (adrSource^) { local (adrItem = @adrSource^ [i]); if typeOf (adrItem^) != tableType { table.copy (adrItem, adrSearchTable)}}; return (true)}}; on getSiteRoot (adrObject) { //get the root address of this website local (nomad = adrObject); if typeOf (nomad^) != tableType { nomad = parentOf (nomad^)}; loop { if defined (nomad^.["#ftpSite"]) { return (nomad)}; if defined (nomad^.["#prefs"].ftpSite) { return (nomad)}; if defined (nomad^.["#prefs"].["#ftpSite"]) { return (nomad)}; nomad = parentOf (nomad^); if nomad == nil or nomad == @root { return (nomad)}}}; on getSearchTable (adrObject) { //get the address of the search table for this website local (nomad = adrObject); if typeOf (nomad^) != tableType { nomad = parentOf (nomad^)}; loop { if defined (nomad^.["#search"]) { return (@nomad^.["#search"])}; if defined (nomad^.["#prefs"].search) { return (@nomad^.["#prefs"].search)}; if defined (nomad^.["#prefs"].["#search"]) { return (@nomad^.["#prefs"].["#search"])}; nomad = parentOf (nomad^); if nomad == nil or nomad == @root { return (false)}}}; <<Get the path to this database. dbPath = window.getFile (table.getRootAddress (adrObject)); <<Find the entry for this database in user.databases. bundle { <<local (dbName = file.fileFromPath (dbPath)) <<if defined (user.databases.[dbName]) <<adrUserTable = @user.databases.[dbName] <<Loop through the user.databases table, looking for an entry where the paths match. local (i); local (lowerPath = string.lower (dbPath)); for i = 1 to sizeOf (user.databases) { if defined (user.databases [i].f) { if string.lower (user.databases [i].f) == lowerPath { adrUserTable = @user.databases [i]; break}}}}; <<If the user.databases table doesn't exist, or supportsIndexing doesn't exist or is false, return right away. bundle { if adrUserTable == nil { return (false)}; if not defined (adrUserTable^.supportsIndexing) { return (false)}; if not adrUserTable^.supportsIndexing { return (false)}}; <<Copy the user.databases table into the search table. copyPrefs (adrUserTable); <<Copy preferences from config.mainResponder.search. copyPrefs (@config.mainResponder.search); <<Next get the sites table from config.mainResponder.search.sites. (It might not exist, that's okay.) bundle { if adrSitesTable == nil { local (adrSiteRoot = getSiteRoot (adrObject)); //get the root address of this website if (adrSiteRoot != nil) and (adrSiteRoot != @root) { local (i); local (adrTable = @config.mainResponder.search.sites); for i = 1 to sizeOf (adrTable^) { if defined (adrTable^ [i].adrSite) { if adrTable^ [i].adrSite == adrSiteRoot { adrSitesTable = @adrTable^ [i]; break}}}}}}; <<Copy prefs from the sites table. copyPrefs (adrSitesTable); <<Find the #search table for this site. It might not exist, that's okay. adrSearchDirectiveTable = getSearchTable (adrObject); <<Copy prefs from the #search table. copyPrefs (adrSearchDirectiveTable); 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.