Monday, November 08, 2010 at 12:05 AM.

system.verbs.builtins.searchEngine.createPreview

on createPreview (s, title, url, pageID, adrPreviews, lastModified=nil) {
	<<Create a preview for a page. Return the address of the preview.
		<<s is the text of the page.
		<<title is the title of the page.
		<<url is the url of the page.
		<<pageID is the page's identifier -- odb address, url, or filespec.
		<<adrPreviews is the address of the previews table.
		<<lastModified is when the page was last modified.
	
	local (preview = "");
	
	on add (s) {
		preview = preview + s};
	
	preview = preview + ("<b>" + html.getLink (title, url) + "</b><br>\r");
	
	s = string.replaceAll (s, "***", "");
	s = string.replaceAll (s, " ", " ");
	s = string.replaceAll (s, "  ", " ");
	
	if string.lower (s) contains "<body " { //is this a raw page?
		s = html.getOneTagValue (s, "body")}; //just get the body text
	
	loop { //get preview text from page minus directives
		if not (s beginsWith "#") {
			s = searchEngine.stripMarkup (s);
			local (i);
			local (wordsToGet = 15);
			local (numFields = string.countFields (s, ' '));
			if numFields < wordsToGet {
				wordsToGet = numFields};
			local (origString = s);
			s = "";
			for i = 1 to wordsToGet { //get 15 words
				s = s + " " + string.nthField (origString, ' ', i)};
			s = string.trimWhiteSpace (s);
			s = s + "...";
			break};
		ix = string.patternMatch ("\r", s);
		if ix < 1 {
			s = searchEngine.stripMarkup (s) + "...";
			break};
		s = string.delete (s, 1, ix)};
	
	add (s); //add text to preview
	
	add ("\r<br>\r");
	
	if lastModified == nil {
		try {
			add ("Last-modified: " + timeModified (pageID) + "<br>")}
		else {
			lastModified = clock.now ()}}
	else {
		add ("Last-modified: " + lastModified + "<br>")};
	
	add ("<a href=\"" + url + "\">" + url + "</a>");
	
	adrPreviews^.[pageID] = preview;
	
	return (@adrPreviews^.[pageID])} //return address of now-cached preview



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.