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"&"e&objectID"e 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