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.