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

system.verbs.apps.AnArchie.utilities.organizeOutline

on organizeOutline (outlineAddr) {
	local (summitText);
	
	<<move the cursor to the first real processable line
	target.set(outlineAddr);
	op.firstsummit();
	summitText = op.getLineText();
	op.go(right,1);
	op.sort(); << sort it to make sure things are pre-ordered for scanning
	
	local(curLine, nextLine, dir, matchCount, atEnd = false);
	loop {
		on processLine(testLine, addHeading) {
			nextLine = op.getLineText();
			if (testLine == nextLine) { << we found a match
				matchCount++;
				addIt = false;
				if (addHeading) {
					op.go(up, 2); << move to last non-match line
					if (op.getLineText() == summitText) { << first item was match
						dir = right};
					op.insert(testLine + " +", dir);
					op.go(down, 1);
					op.reorg(right, 1);
					op.go(flatdown,1)};
				op.reorg(right,1);
				if (op.go(flatdown, 1)) {
					return(true)}
				else {
					atEnd = true;
					return(false)}} << no more entries!
			else {
				return(false)}};
		dir = down;
		matchCount = 0;
		curLine = op.getLineText();
		if (op.go(down, 1)) {
			addIt = true;
			loop {
				if (!processLine(curLine, addIt)) {
					if (matchCount > 0) {
						matchCount++; << adjust for initial find
						if (!atEnd) { << we need to be a bit smarter on the last entry
							op.go(flatup, matchCount+1)} << adjust for header
						else {
							op.go(flatup, matchCount)};
						op.setLineText(curLine + " ["+string(matchCount)+"]");
						op.collapse()}; << makes things cleaner
					break}}}
		else {
			break}};
	target.clear()};

<<organizeOutline(@system.verbs.apps.anarchie.searchResultsTst)



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.