Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.html.publishBinaryObject
on publishBinaryObject (adrObject, adrPageTable, templateName=nil) {
<<This script publishes a binary object.
<<It's called from html.buildObject.
<<The binary can be anything -- an image, a java class, a shockwave file.
<<The file suffix of the object is gotten in one of two ways:
<<1) Looking at the name of the object.
<<If the name contains a . character, then the name includes the file suffix.
<<2) Looking at the binary type of the object.
<<The binary type becomes the file suffix, after pre-pending a . char.
<<Images binary types of 'GIFf' and 'JPEG' are translated to .gif and .jpg.
<<Tue, Aug 11, 1998 at 8:02:40 PM by PBS
local (binType = getBinaryType (adrObject^));
local (objectName = nameOf (adrObject^));
local (suffix = binType);
local (macType = binType, macCreator);
local (flNameContainsSuffix = false);
bundle { //get the file suffix
if objectName contains "." { //is the suffix part of the name of the object?
suffix = string.nthField (objectName, '.', string.countFields (objectName, '.'));
flNameContainsSuffix = true};
suffix = string.nthField (suffix, ' ', 1); //remove trailing spaces
suffix = "." + suffix; //pre-pend a period
<<Handle 'GIFf' and 'JPEG' binary types
if string.lower (suffix) == ".giff" {
suffix = ".gif"};
if string.lower (suffix) == ".jpeg" {
suffix = ".jpg"}};
bundle { //get the Macintosh creator code
local(theOS = sys.os());
if theOS == "MacOS" || theOS == "MacCn" {
macCreator = frontier.id;
case suffix {
".gif" {
macType = 'GIFf';
macCreator = html.getPref ("imgFileCreator")};
".jpg" {
macType = 'JPEG';
macCreator = html.getPref ("imgFileCreator")}}}};
bundle { //fix f, fname, and URL to have the right file suffix and folder name
on fixPath (adrString) {
adrString^ = string.popSuffix (adrString^, '.'); //remove current suffix
if flNameContainsSuffix { //pop off the suffix from the path -- it's been normalized into the path
adrString^ = string.mid (adrString^, 1, sizeOf (adrString^) - (sizeOf (suffix) -1));
adrString^ = string.popTrailing (adrString^, '.')}; //remove possible stray . char
adrString^ = adrString^ + suffix; //add correct suffix
if adrString^ contains "#" { //the object may live in an #images (or similar) table -- remove the # char
local (folderName = nameOf (parentOf (adrObject^)^));
if folderName beginsWith "#" {
local (pathDelim = file.getPathChar ());
if string.lower (nameOf (adrString^)) == "url" { //For URLs, the path delimiter is the forward slash
pathDelim = "/"};
<<Find occurence of /#images/ or \#images\ or :#images: in the path
local (ix = string.patternMatch (pathDelim + folderName + pathDelim, string.lower (adrString^)));
if ix > 0 {
adrString^ = string.delete (adrString^, ix + 1, 1)}}}}; //delete the # character
fixPath (@adrPageTable^.fname); //Fix the file file name
fixPath (@adrPageTable^.f); //Fix the file path
fixPath (@adrPageTable^.url)}; //Fix the URL
<<Write the file.
html.writeFile (adrPageTable^.f, adrObject, macType, macCreator, clock.now (), adrPageTable);
return (adrObject^)} //return the contents of the binary object to html.buildObject
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.