Here's a script that I use to generate the local-url fields for my BibDesk databases necessary for my own scripts to be able to access linked files. The script is only a very minor modification of something I found a while ago on the BibDesk wiki. Also, it is still not perfect, as it would overwrite local-url fields very time it is run. I just don't have the time and motivation to fix that right now :-(
(* Add Local-Url fields to all publications, containing a relative (if possible) path to the file encoded in the Bdsk-File-1 entry. *) tell application "BibDesk" activate set theDoc to get first document set theFile to (get file of theDoc) set theDocDir to my containerPath(get file of theDoc) tell theDoc set thePublications to displayed publications repeat with currentpub in thePublications tell currentpub set theID to get id set the value of field "Local-Id" to theID if ((count of (get linked files)) > 0) and ((get linked file 1) is not missing value) then set linkedFile to linked file 1 tell linkedFile set thePath to get POSIX path end tell --set thePath to my relativePath(thePath, theDocDir) (* we might want to change the following line to a conditional, to prevent that manually changed local-urls get overwritten when this script is used again *) set the value of field "Local-Url" to thePath end if end tell end repeat end tell end tell on relativePath(fullPath, basePath) set theLength to length of basePath if (length of fullPath > theLength) and (text 1 thru theLength of fullPath) = basePath then return text theLength thru end of fullPath else return fullPath end if end relativePath on containerPath(theFile) set AppleScript's text item delimiters to "/" set theComponents to text items of (POSIX path of theFile) if last item of theComponents is "" and (count of theComponents) > 2 then set theComponents to items 1 thru -3 of theComponents else set theComponents to items 1 thru -2 of theComponents end if return (theComponents as text) & "/" end containerPath
0 comments:
Post a Comment
Comments are moderated to prevent abuse and may not be made public immediately.