Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.utilities.buildCDF
on buildCDF (adrsite) { <<build a Microsoft CDF-format file for the site
<<Original version by Wesley Felter, wesf@mail.utexas.edu
<<Second version by Dave Winer, dwiner@well.com
<<Mon, Apr 14, 1997 at 11:18:55 AM by DW
<<For docs, see http://www.microsoft.com/standards/cdf.htm.
<<The site must have a #cdf table at the top level.
local (adrcdf = @adrsite^.["#cdf"]);
if not defined (adrcdf^) {
scriptError (adrsite + " doesn't have contain a #cdf table.")};
local (channeltext = "");
with adrcdf^ {
on add (s) {
channeltext = channeltext + s};
on dateString (d) {
local (day, month, year, hour, minute, second);
date.get (d, @day, @month, @year, @hour, @minute, @second);
return (year + "." + month + "." + day + "TO" + hour + ":" + minute + timeZone)};
on addLastMod (adr) {
add ("<LastMod VALUE=\"" + dateString (timeModified (adr)) + "\" />\r")};
add ("<!DOCTYPE Channel SYSTEM \"http://www.w3c.org/Channel.dtd\" >\r\r");
local (adrlist = {});
bundle { <<add channel header
add ("<Channel HREF=\"" + siteurl + "\" IsClonable=");
if isClonable {
add ("YES")}
else {
add ("NO")};
add (" >\r")};
bundle { <<add pagesThatChange, each one an "item"
target.set (@adrcdf^.pagesThatChange);
op.firstSummit ();
loop {
local (title = "", abstract = "", author = "");
local (adr = op.getLineText ());
if op.go (right, 1) {
on gethead () {
local (s = op.getlinetext ());
s = string.commentDelete (s);
s = string.popTrailing (s, ' ');
op.go (down, 1);
return (s)};
url = gethead ();
title = gethead ();
abstract = gethead ();
author = gethead ();
add ("\r\t<Item ");
if url != "" {
add ("HREF=\"" + url + "\"")};
add (" >\r");
add ("\t\t"); addLastMod (adr);
if title != "" {
add ("\t\t<Title VALUE=\""+ title + "\" />\r")};
if abstract != "" {
add ("\t\t<Abstract VALUE=\""+ abstract + "\" />\r")};
if author != "" {
add ("\t\t<Author value=\"" + author + "\" />\r")};
add ("\t\t</Item>\r");
op.go (left, 1)};
if not op.go (down, 1) {
break}};
target.clear ()};
bundle { <<add schedule
add ("\r\t<schedule>\r");
if defined (schedule.startDate) {
add ("\t\t<StartDate VALUE=\"" + dateString (schedule.startDate) + "\" />\r")};
if defined (schedule.endDate) {
add ("\t\t<EndDate VALUE=\"" + dateString (schedule.endDate) + "\" />\r")};
if defined (schedule.earliestTime) {
add ("\t\t<EarliestTime VALUE=\"" + schedule.earliestTime + "\" />\r")};
if defined (schedule.latestTime) {
add ("\t\t<LatestTime VALUE=\"" + schedule.latestTime + "\" />\r")};
if defined (schedule.intervalTime) {
add ("\t\t<IntervalTime VALUE=\"" + schedule.intervalTime + "\" />\r")};
add ("\t\t</schedule>\r")};
add ("\r\t</Channel>");
};
return (channeltext)}
<<bundle <<test code
<<wp.newtextobject (buildCDF (@user.websites.davenet), @scratchpad.cdf)
<<edit (@scratchpad.cdf)
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.