Monday, November 08, 2010 at 12:05 AM.
system.verbs.builtins.radio.utilities.homeFolderTextFiles.install
<<Changes
<<12/20/01; 1:23:24 AM by JES
<<Use file.writeTextFile to write files. This also eliminates a bunch of code which calculated the mac type/creator codes, and line-endings.
<<12/13/01; 4:47:50 PM by JES
<<On MacOS X, write text files with a type of ' ' and a creator of 'text'.
<<12/9/01; 3:08:56 PM by JES
<<Fixed the check to see if radio.data.flReinstallHomeFolderFiles is defined.
<<11/30/01; 12:53:33 PM by JES
<<Write files with the line-ending native to the platform. Check radio.data.flReinstallHomeFolderFiles, instead of radio.data.reinstallHomeFolderFiles.
<<11/16/01; 2:05:32 PM by JES
<<Only patch macro delimiters in templates once. This prevents cascading style sheets which are embedded in the #template and #homeTemplate from getting mucked up.
<<11/1/01; 12:46:57 PM by JES
<<Fixed an error if weblogData.template, weblogData.dayTemplate, or weblogData.itemTemplate is not defined. These are deprecated in Radio 7.1.
<<10/18/01; 9:44:16 PM by JES
<<Don't fail when upgrading files, if the file doesn't exist on disk.
<<Still to do: make sure that this code respects the last applied theme.
<<10/9/01; 5:55:45 PM by JES
<<Only install the home folder text files if radio.data.reinstallHomeFolderFiles is true. This prevents writing out unwanted files which may mess up a Theme.
<<To cause the home folder text files to be re-written, set radio.data.reinstallHomeFolderFiles to true, and check it in, before checking in radio.data.flinstall.
<<10/6/01; 11:05:43 PM by JES
<<Make sure the path to a file exists before attempting to write it to disk.
local (pc = file.getPathChar ());
local (adrtable = @radio.data.homeFolderTextFiles);
local (homefolder = user.radio.prefs.wwwfolder);
local (adr);
if not defined (radio.data.flReinstallHomeFolderFiles) {
radio.data.flReinstallHomeFolderFiles = false};
for adr in adrtable {
local (objectname = nameOf (adr^));
local (f = homefolder + string.replaceAll (objectname, "/", pc));
<<local (macCreator, macType)
<<if system.environment.isCarbon //on MacOS X, creator is TextEdit, type is ' '
<<macCreator = 'text'
<<macType = ' '
<<else //for Classic, creator is SimpleText, type is 'TEXT'
<<macCreator = 'ttxt'
<<macType = 'TEXT'
bundle { //set the mac type and creator
local (extension = string.lower (string.nthField (objectname, '.', string.countFields (objectname, '.'))));
case extension {
"opml" {
macCreator = Frontier.id;
macType = 'OPML'};
"html" {
macCreator = user.html.prefs.textFileCreator}}};
if radio.data.flReinstallHomeFolderFiles {
<<local (eol = "\r\n")
<<if system.environment.isMac //eol is either \r or \n
<<if system.environment.isCarbon
<<eol = "\n"
<<else //classic
<<eol = "\r"
<<local (filetext = string (adr^))
<<bundle //convert to the platform-native line ending style
<<filetext = string.replaceAll (filetext, "\r\n", "\r")
<<filetext = string.replaceAll (filetext, "\n", "\r")
<<filetext = string.replaceAll (filetext, "\r", eol)
file.sureFilePath (f);
<<file.writewholefile (f, string (adr^), macType, macCreator)
file.writeTextFile (f, string (adr^));
file.setcreated (f, timecreated (adr));
file.setmodified (f, timemodified (adr))}
else { //do upgrades: set type/creator on MacOS, change { & } to <% & %>, change {text} to <%itemText%>
if file.exists (f) { //the file may not exist if a Theme has been applied, or if the user has deleted the file
bundle { //patch templates -- this is bootstrap code which will go away
local (s = file.readWholeFile (f));
local (lowername = string.lower (file.fileFromPath (f)));
if (lowername endsWith ".opml") or (lowername endsWith ".txt") { //upgrade all text and opml files
if not (lowername beginsWith "#cascadingstylesheet.") { //don't touch the css
local (flRewriteFile = false);
if not (lowername beginsWith "#javascript.") { //don't touch the JavaScript
local (flOutline = false);
if (lowername endsWith ".opml") {
local (localOutline);
op.xmlToOutline (s, @localOutline);
s = string (localOutline);
flOutline = true};
if (s contains "{") and (s contains "}") { //upgrade macro delimiters
if not (s contains "<%" and s contains "%>") { //already patched -- don't do it again
s = string.replaceAll (s, "{", "<%");
s = string.replaceAll (s, "}", "%>");
flRewriteFile = true}};
if lowername beginsWith "#itemtemplate" { //change <%text%> to <%itemText%>
s = string.replaceAll (s, "<%text%>", "<%itemText%>", false);
flRewriteFile = true};
if flRewriteFile {
local (createDate = file.created (f));
if flOutline {
local (localOutline);
op.newOutlineObject (s, @localOutline);
s = op.outlineToXml (@localOutline)};
<<file.writeWholeFile (f, s, macType, macCreator, createDate)
file.writeTextFile (f, s)}}}}}}}};
<<bundle //on the mac, make sure the type and creator code are correct
<<if system.environment.isMac
<<file.setType (f, macType)
<<file.setCreator (f, macCreator)
<<bundle //patch the weblog templates in weblogData.root, if defined
<<local (adrweblog = radio.weblog.init ())
<<local (adrprefs = @adrweblog^.prefs)
<<on patchTemplate (adrtemplate)
<<if not defined (adrtemplate^)
<<return
<<local (s = string (adrtemplate^))
<<if (s contains "{") and (s contains "}") //upgrade macro delimiters
<<s = string.replaceAll (s, "{", "<%")
<<s = string.replaceAll (s, "}", "%>")
<<flRewriteFile = true
<<op.newOutlineObject (s, adrtemplate)
<<patchTemplate (@adrprefs^.template)
<<patchTemplate (@adrprefs^.dayTemplate)
<<patchTemplate (@adrprefs^.itemTemplate)
radio.data.flReinstallHomeFolderFiles = false
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.