xml or other complete text representation of a control?

Brian Yennie briany at qldlearning.com
Sat Feb 14 03:26:40 EST 2004


Doug,

"the properties" returns an associative array, perhaps you were 
treating it as a string?

Check out the following- with the recent CVS thread going on here, I 
banged out this script to convince myself that textual representations 
of stacks weren't too bad. There's a bunch of stuff in here, including 
customProperties and escaping property values so they'll all fit on one 
line, etc, etc.

But mostly, per your question you basically have a couple of options 
for dealing the "the properties" array- use combine (but watch out for 
property values that might contain your delimiter string inside of 
them, esp. with custom properties), or loop through the individual 
elements of the array using either: "repeat for each element e in 
propArray" or "repeat for each line tKey in keys(propArray)".

HTH,
Brian

####################

## DEFINE SOME CONSTANTS
constant kNONE = 0
constant kSTACK = 1
constant kCARD = 2
constant kPART = 3
constant kTYPENAMES = "stack,card,part"

on mouseUp
   ## CHOOSE A FOLDER TO EXPORT THIS STACK TO
   answer folder "Please select a folder to export to."
   if (the result is "Cancel") then exit mouseUp
   exportStack it, the short name of this stack
end mouseUp

on exportStack theDir,whichStack
   put the directory into saveDir
   put the defaultStack into saveDefault

   set the directory to theDir
   set the defaultStack to whichStack

   ## EXPORT THE STACK OBJECT
   textExport kSTACK, the short name of this stack,kNONE,0

   ## LOOP THROUGH EACH CARD AND EXPORT EACH OF ITS PARTS
   ## NOTE:: GROUPS SHOW UP AS THEIR OWN 'PART' ON EACH CARD THEY BELONG 
TO
   repeat with i=1 to (number of cds in this stack)
     exportCard theDir,whichStack,the id of cd i of this stack
   end repeat

   ## RESTORE THE CURRENT DIRECTORY
   set the directory to saveDir
   set the defaultStack to saveDefault
end exportStack

on exportCard theDir,whichStack,cardID
   put the directory into saveDir
   put the defaultStack into saveDefault

   set the directory to theDir
   set the defaultStack to whichStack

   textExport kCARD, cardID,kSTACK,the short name of this stack
   repeat with j=1 to number of cd parts of cd id cardID of this stack
     exportPart theDir,whichStack,cardID,the id of part j of cd id 
cardID of this stack
   end repeat

   set the directory to saveDir
   set the defaultStack to saveDefault
end exportCard

on exportPart theDir,whichStack,cardID,partID
   put the directory into saveDir
   put the defaultStack into saveDefault

   set the directory to theDir
   set the defaultStack to whichStack

   textExport kPART,partID,kCARD,cardID

   set the directory to saveDir
   set the defaultStack to saveDefault
end exportPart


on textExport objectType, objectID, parentType, parentID
   ## FIGURE OUT THE RELATIVE LOCATION OF THE FILES
   switch (objectType)
   case kSTACK
     put (the directory)&"/stack_"&objectID&"/" into parentDir
     break
   case kCARD
     put (the directory)&"/"&(item parentType of 
kTYPENAMES)&"_"&(parentID)&"/card_"&objectID&"/" into parentDir
     break
   case kPART
     put (the directory)&"/"&("stack_"&(the short name of this 
stack))&"/"&(item parentType of 
kTYPENAMES)&"_"&(parentID)&"/part_"&objectID&"/" into parentDir
     break
   end switch

   ## CREATE A FOLDER FOR THIS OBJECT
   create folder parentDir

   if (objectType = kSTACK) then
     put "stack"&&quote&objectID&quote into objectDesc
   else
     put ((item objectType of kTYPENAMES)&" id "&objectID) into 
objectDesc
     put the long id of objectDesc into objectDesc
   end if

   put (parentDir)&(item objectType of kTYPENAMES)&"["&(objectID)&"]" 
into fName

   ## EXPORT THE SCRIPT
   put the script of objectDesc into tScript
   put tScript into url ("file:"&fName&".sct")

   ## EXPORT THE ORDINARY PROPERTIES
   put the properties of objectDesc into tProps
   put extractProps(tProps) into url ("file:"&fName&".prp")
   if (word 1 of the long id of objectDesc is "image") AND (the fileName 
of objectDesc is empty) then
     put compress(the imageData of objectDesc) into url 
("file:"&fName&".image")
     put compress(the alphaData of objectDesc) into url 
("file:"&fName&".alpha")
     put compress(the maskData of objectDesc) into url 
("file:"&fName&".mask")
   end if

   ## EXPORT THE CUSTOM PROPERTIES
   put empty into tCustomProps
   put the customPropertySet of objectDesc into savePropertySet
   repeat for each line tPropertySet in the customPropertySets of 
objectDesc
     set the customPropertySet of objectDesc to tPropertySet
     put the customProperties of objectDesc into tProps
     put tPropertySet&colon&cr&extractProps(tProps)&cr after tCustomProps
   end repeat
   put tCustomProps into url ("file:"&fName&".cst")
   set the customPropertySet of objectDesc to savePropertySet
end textExport

function extractProps @tPropArray
   local tPropData
   repeat for each line tKey in keys(tPropArray)
     put tPropArray[tKey] into tValue
     replace "\" with "\\" in tValue
     replace return with "\r" in tValue
     put tKey&colon&tValue&cr after tPropData
   end repeat
   return tPropData
end extractProps

> I don't get any result from "the properties" when I try this with 
> graphic or
> field objects. Maybe that only works for custom properties?



More information about the use-livecode mailing list