Monday, November 08, 2010 at 12:04 AM.
system.verbs.builtins.mainResponder.crawler
on crawler (adrobject, adrcallback = @msg) { local (adrstack = @system.temp.crawlerStack); on crawlObject (adrobject) { try { adrstack^.[string.padwithzeros (sizeof (adrstack^), 5)] = adrobject; if not adrcallback^ (adrobject) { //callback gets to say no return}; case typeof (adrobject^) { addresstype { if not defined (adrobject^^) { edit (adrobject); scripterror ("Pointer points to an object that doesn't exist.")}; crawlObject (adrobject^)}; tabletype { local (i, adritem); for i = 1 to sizeof (adrobject^) { adritem = @adrobject^ [i]; if not html.traversalSkip (adritem) { crawlObject (adritem)}}}; filespectype { local (f = adrobject^); if not file.exists (f) { edit (adrobject); scripterror (f + " does not exist.")}; if file.isfolder (f) { local (subfile); fileloop (subfile in f) { crawlObject (@subfile)}} else { if f endswith ".root" { //an object db, open it local (weOpenedIt = false); if not window.isopen (f) { filemenu.open (f); window.hide (f); weOpenedIt = true}; crawlObject (@[f]); if weOpenedIt { filemenu.close (f)}}}}}; delete (@adrstack^ [sizeof (adrstack^)])} else { edit (adrobject); scripterror (tryerror)}}; mainresponder.init (); window.about (); if defined (adrstack^) { table.emptytable (adrstack)} else { new (tabletype, adrstack)}; crawlObject (adrobject)} <<bundle //test code <<on callback (adrobject) <<case typeof (adrobject^) <<filespectype <<msg (adrobject^) <<else <<msg (adrobject) <<return (true) <<crawler (@config.mainresponder.domains, @callback)
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.