Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.utilities.convertclaysite
on convertclaysite (f, adrtable) {
<<f is the path to a clay basket outline file, adrtable is the table it is loaded into
local (mediafolder = file.folderfrompath (f) + "Media Objects:" );
local (inputfolder = file.folderfrompath (f) + "Input Folder:");
local (gifurl = "http://www.scripting.com/gifs/");
local (giffolder = "8100:Server:WebStar:gifs:");
local (fname = file.fileFromPath (f));
new (tabletype, adrtable);
target.set (adrtable);
editmenu.setfont ("geneva");
editmenu.setfontsize (12);
local (adroutline = @adrtable^.default);
bundle { <<create the outline
new (outlinetype, adroutline);
target.set (adroutline);
edit (adroutline);
op.setlinetext ("#title \"" + fname + "\"");
op.insert ("#renderOutlineWith \"siteOutliner\"", down)};
clay.launch ();
clay.opendocument (f);
clay.outliner.firstsummit ();
clay.outliner.expand (infinity);
on dolevel (dir) {
loop {
local (linetext = clay.outliner.getlinetext ());
target.set (adroutline);
op.insert (linetext, dir);
dir = down;
bundle { <<if it has a linked text file, do the text file thing
local (url = clay.web.geturl ());
if sizeof (url) > 0 {
op.setlinetext ('"' + linetext + '"');
local (info);
new (tabletype, @info);
clay.website.getpageinfo (@info);
local (cellname = "");
bundle { <<figure out what the cellname is
local (maxlen = user.html.prefs.maxFileNameLength - sizeof (user.html.prefs.fileExtension)); <<new in 4.0.1
local (i, ch);
for i = 1 to sizeof (linetext) {
if sizeof (cellname) >= maxlen { <<new in 4.0.1
break};
ch = linetext [i];
if string.isAlpha (ch) or string.isNumeric (ch) {
cellname = cellname + string.lower (ch)}}};
local (adrtext = @adrtable^.[cellname]);
bundle { <<get the file text
local (filetext = "");
local (url = clay.web.geturl (), textfile);
if url beginswith "sitefile:///" {
textfile = inputfolder + string.delete (url, 1, 12)};
if url beginswith "file:///" {
textfile = string.delete (url, 1, 8)};
filetext = wp.readFileIntoTextObject (textfile, adrtext);
edit (adrtext);
window.zoom (adrtext);
wp.go (up, infinity);
wp.go (left, infinity);
window.close (adrtext)};
bundle { <<scan the text for mediaobject macros
local (s = string (adrtext^), lowers = string.lower (s), ix);
loop {
ix = string.patternmatch ("{mediaobject", lowers);
if ix == 0 {
break};
local (gifname = "", ixsecondquote = 0);
for i = ix + 1 to sizeof (s) {
if s [i] == "\"" {
local (j);
for j = i + 1 to sizeof (s) {
if s [j] == "\"" {
ixsecondquote = j;
break};
gifname = gifname + s [j]};
break}};
if ixsecondquote > 0 {
local (j, len = 0);
for j = ixsecondquote to sizeof (s) {
msg (s [j]);
if s [j] == "}" {
len = j - ix + 1;
break}};
if len > 0 {
if not (gifname endswith ".gif") {
gifname = gifname + ".gif"};
msg ("Copying " + gifname);
file.copy (mediafolder + gifname, giffolder + gifname);
local (htmltext = "<center><img src=\"" + gifurl + gifname + "\"></center><p>");
s = string.delete (s, ix, len);
s = string.insert (htmltext, s, ix);
lowers = string.lower (s);
target.set (adrtext);
wp.settext (s);
target.clear ()}}}};
bundle { <<add #directives
local (s = "");
s = s + "#title \"" + linetext + "\"" + cr;
s = s + "#author \"" + info. author + "\"" + cr;
s = s + "#bgcolor \"" + info. backcolor + "\"" + cr;
s = s + "#link \"" + info. linkcolor + "\"" + cr;
s = s + "#posttime \"" + info.posttime + "\"" + cr;
<<s = s + "#template \"" + info. templatename + "\"" + cr
s = s + "#text \"" + info. textcolor + "\"" + cr;
s = s + "#vlink \"" + info. visitedlinkcolor + "\"" + cr;
s = s + string (adrtext^);
target.set (adrtext);
wp.settext (s);
target.clear ()}}};
if clay.outliner.countsubs (1) > 0 {
clay.outliner.go (right, 1);
dolevel (right);
clay.outliner.go (left, 1);
op.go (left, 1)};
if not clay.outliner.go (down, 1) {
break}}};
dolevel (down);
clay.quit ();
op.firstsummit ();
op.expand (1);
window.zoom (adroutline)};
bundle { <<test code
local (f = "Macintosh HD:Websites:MacBird:macbird outline");
local (adrtable = @user.websites.macbird);
convertclaysite (f, adrtable)}
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.