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


on buildFromOutline (adroutline) { <<4.2
	<<the outline contains a list of addresses of pages to be built
		<<for each page, if we can build it, we delete the line from the outline
		<<so, if you use this to build a list every night for example, make a copy of the outline first
		<<if there's an error, we don't delete the line; you can try again later
		<<Fri, Dec 20, 1996 at 7:57:51 AM by DW
	local (errorstring, ctbuilds = 0);
	on process (adr) { <<return true if the page has been built successfully
		errorstring = "";
		if adr == "" {
			return (false)};
		try {
			if not defined (adr^) {
				errorstring = "Can't build the page because \"" + adr + "\" does not exist.";
				return (false)};
			window.msg (adr);
			if typeOf (adr^) == tableType { //build a table
				html.ftpTable (adr, false)};
			html.buildOnePage (adr);
			return (true)}
		else {
			errorstring = tryError;
			return (false)}};
	local (oldtarget = target.get ());
	target.set (adroutline);
	op.firstSummit ();
	loop {
		if process (op.getLineText ()) {
			op.deleteLine ()}
		else {
			if errorstring != "" {
				op.insert ( () + ": " + errorstring, right);
				script.makecomment ();
				op.go (left, 1)};
			if not op.go (down, 1) {
	try {target.set (oldtarget)};
	return (ctbuilds)}
<<bundle <<test code
	<<buildFromOutline (@user.html.changedPages)

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.