Monday, November 08, 2010 at 12:02 AM.
system.verbs.builtins.batchExporter.batchExport
on batchExport (exportoutline = @user.batchExporter.list, log = @user.batchExporter.log) {
<<http://www.scripting.com/frontier/snippets/batchExporter.html
<<Sat, Nov 1, 1997 at 7:15:08 AM by DW
<<Fixed two minor bugs, it wasn't respecting the second parameter.
<<Fixed path characters, replaced hard-coded colons with calls to file.getPathChar
local (pathchar = file.getPathChar ());
batchExporter.init ();
local (baseFolder = user.batchExporter.folder);
file.sureFolder (baseFolder);
local (exportList = {});
bundle { //fill up exportList
target.set (exportoutline);
op.firstSummit ();
loop {
if not script.isComment () {
exportList = exportList + op.getlinetext ()};
if not op.go (down, 1) {
break}};
target.clear ()};
local (logdir = right);
on addtolog (s) {
if user.batchExporter.keepLog {
target.set (log);
op.insert (s, logdir);
logdir = down}};
on closelog () {
if user.batchExporter.keepLog {
target.set (log);
op.go (left, 1)}};
if user.batchExporter.keepLog { <<set up the log outline
local (s = "Batch Exporter run on " + clock.now ());
if defined (log^) {
target.set (log);
op.firstSummit ();
op.insert (s, up)}
else {
new (outlinetype, log);
target.set (log);
op.setLineText (s)};
edit (log)};
local (ctexportedobjects = 0);
on cleanFileName (adr, isFolder=false) {
<<Monday, March 02, 1998 at 12:20:00 AM by PBS
<<Add suffixes on Windows -- Macs too if pref is set.
local (name = nameOf (adr^));
local (maxlen);
case sys.os () {
"WinNT";
"Win95" {
maxlen = 250};
"MacOS" {
maxlen = 26}};
if isFolder {
maxlen = maxlen + 5};
if sizeof (name) > maxlen {
name = string.mid (name, 1, maxlen)};
if not isFolder {
case sys.os () {
"WinNT";
"Win95" {
name = name + "." + frontier.getFileSuffix (typeOf (adr^))};
"MacOS" {
if not defined (user.prefs.appendFileSuffixes) {
user.prefs.appendFileSuffixes = false};
if user.prefs.appendFileSuffixes {
name = name + "." + string.lower (frontier.getFileType (typeOf (adr^)))}}}};
name = string.replaceAll (name, pathchar, "-");
return (name)};
on exportItemsSeparately (adritem) { <<always returns false
<<Change in policy -- Sun, Feb 2, 1997 at 10:36:22 AM by DW
<<Now we only export sub-items separately if we failed when when we tried to export the whole thing
<<See readme doc for details.
return (false);
if not table.tableContains (@user.website, adritem) {
return (false)};
if typeOf (adritem^) != tableType {
return (false)};
local (i);
for i = 1 to sizeOf (adritem^) {
if typeOf (adritem^ [i]) == tableType {
return (true)}};
return (false)};
on saveTable (adrTable, parentFolder) {
local (folder = parentFolder + cleanFileName (adrTable, isFolder:true) + pathchar);
file.sureFolder (folder);
local (i, adrItem, name);
for i = 1 to sizeof (adrTable^) {
adrItem = @adrTable^ [i];
name = cleanFileName (adrItem);
if exportItemsSeparately (adrItem) {
saveTable (adrItem, folder)}
else {
local (f = folder + name);
try {
export.sendObject (adrItem, f);
ctexportedobjects++;
msg ("#" + ctexportedobjects + ": " + f);
addtolog (string (adrItem) + " is safe.")}
else {
try {file.delete (f)};
if typeOf (adrItem^) == tableType {
saveTable (adrItem, folder)}
else {
addtolog (string (adrItem) + " has a problem: " + tryError)}}}}};
local (item);
for item in exportList {
saveTable (item, baseFolder)};
addtolog (ctexportedobjects + " objects exported to \"" + baseFolder + "\".");
closelog ()}
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.