Monday, November 08, 2010 at 12:03 AM.
system.verbs.builtins.Frontier.tools.windowTypes.commands.saveAsPlainText
on saveAsPlainText (adr=nil, adrFilepath=nil) {
<<Save as plain text. Remember that this document is a plain text document -- always save it as plain text.
<<12/15/00; 5:04:18 PM by PBS
<<Changes:
<<12/29/00; 2:55:43 PM by PBS
<<Save non file-based outlines -- such as the notepad -- as plain text.
if adr == nil {
adr = window.frontMost ()};
bundle { //run callbacks
on runCallbacks (adrtable) {
local (flConsumed = false);
if defined (adrtable^) {
local (adrcallback);
for adrcallback in adrtable {
try { //11/30/00 JES
while typeOf (adrcallback^) == addressType {
adrcallback = adrcallback^};
flConsumed = adrcallback^ (adr)};
if flConsumed {
return (true)}}};
return (false)};
if runCallbacks (@user.tools.commandCallbacks.saveAsPlainText) {
return (true)};
if system.environment.isRadio {
if defined (user.pike.commandCallbacks.saveAsPlainText) {
if runCallbacks (@user.pike.commandCallbacks.saveAsPlainText) {
return (true)}}}};
local (adrType);
bundle { //if there's a windowType that handles this command, call it
if Frontier.tools.windowTypes.findWindowType (adradrtable:@adrtype, adrwindow:adr) {
if defined (adrtype^.saveAsPlainText) {
if adrtype^.saveAsPlainText (adr, adrFilepath) {
return (false)}}}};
case typeOf (adr^) { //we only know how to render outlines and tables at this time
scriptType;
outlineType {
local (adrtype);
if Frontier.tools.windowTypes.findWindowType ("outlinerFile", @adrtype) {
if defined (adrtype^.saveAsPlainText) {
if not adrtype^.saveAsPlainText (adr) {
return (false)}}}}};
<<bundle //old code
<<local (adrParentTable = parentOf (adrItem^))
<<local (title = window.getTitle (adrItem))
<<if not window.attributes.getOne ("title", @title, adrItem) //base the filename on the window title
<<local (l = string.parseAddress (adrItem))
<<local (ct = sizeOf (l))
<<if ct > 1
<<title = l[ct-1] + "." + l[ct]
<<else
<<title = l[ct]
<<if system.environment.isMac //shorten the filename
<<if sizeOf (title) > 27
<<title = l[ct]
<<if sizeOf (title) > 27
<<title = string.mid (title, 1, 27)
<<if string.lower (title) endsWith ".opml"
<<title = string.popSuffix (title)
<<if string.lower (title) endsWith ".txt"
<<title = string.popSuffix (title)
<<title = title + ".txt"
<<local (fname = title)
<<local (f = fname)
<<if file.putFileDialog ("Save as plain text:", @f)
<<pike.saveAsPlainText (adrItem, f)
<<local (s = string (adrItem^))
<<if system.environment.isWindows //add linefeeds
<<s = string.replaceAll (s, "\r", "\r\n")
<<local (creator = 'Radu')
<<if string.lower (f) endsWith ".py" //special case for Python scripts
<<creator = 'Pyth'
<<file.writeWholeFile (f, s, 'TEXT', creator, clock.now ())
<<bundle //old code fragment
<<local (adrTable = parentOf (adrOutline^))
<<adrTable^.title = file.fileFromPath (f)
<<window.setTitle (adrOutline, adrTable^.title)
<<adrTable^.f = f
<<adrTable^.lastSaved = clock.now ()
<<adrTable^.flOutlineDocument = false
<<adrTable^.flPlainText = true
<<return (Frontier.tools.windowTypes.commands.open (f))
<<else //not a local, file-based outline, but something like the notepad
<<local (title = window.getTitle (adrItem))
<<local (adrTable = pike.newWindow (title, false, false))
<<adrTable^.outline = adrItem^
<<window.getPosition (adrItem, @horiz, @vert)
<<edit (@adrTable^.outline, windowTitle:title)
<<window.setPosition (@adrTable^.outline, horiz + 15, vert + 15)
<<pike.commands.save (@adrTable^.outline)
if adrFilepath != nil { //tell the caller where the file is -- used for View in Browser
adrFilepath^ = f};
return (true)};
bundle { //debugging
saveAsPlainText (window.frontmost ())}
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.