This script adds an alias without punctuation to every tag of the current database that contains punctuation.
If you use DEVONthink’s external Smart Rule script “Assign Tags” with tags as shown in capture one then no tags are added:
.If you add an alias without punctuation then DEVONthink’s external Smart Rule script “Assign Tags” assigns the tag “Hello, world”:
Setup:
-
By default all punctuation is removed.
-
If you want to restrict removal of punctuation set property
theIgnoredPunctuation
to e.g.","
.- Don’t include a space, i.e. don’t set
", "
(or", ;"
). This is correct:","
(or",;"
).
- Don’t include a space, i.e. don’t set
-- Add alias without punctuation to every tag of the current database
-- Setup, optional: By default all punctuation is removed. If you want to restrict removal of punctuation set property theIgnoredPunctuation to e.g. ",".
-- Don't include a space " " in property theIgnoredPunctuation. Don't do this: ", " (or ", ;"). This is correct: "," (or ",;").
use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
property theIgnoredPunctuation : "" -- Add punctuation that should be removed. Don't include a space, i.e. don't set ", " (or ", ;"). This is correct: "," (or ",;"). Set to an empty string "" to remove all punctuation.
property theAliasesDelimiter : "," -- Set your preferred delimiter, either "," or ";". Don't include a space, i.e. don't set ", " (or "; "). This is correct: "," (or ";").
-----------
if theIgnoredPunctuation ≠ "" then
set theCharacterSet to current application's NSMutableCharacterSet's alloc()'s init()
theCharacterSet's addCharactersInString:(theIgnoredPunctuation)
else
set theCharacterSet to current application's NSCharacterSet's punctuationCharacterSet()
end if
tell application id "DNtp"
try
set theTags to tag groups of current database
show progress indicator "Adding Aliases... " steps (count theTags) as string with cancel button
repeat with thisTag in theTags
set thisTag_Name to name of thisTag
step progress indicator thisTag_Name
set thisTag_Name_withoutPuncation to my stripPunctuation(thisTag_Name, theCharacterSet)
if thisTag_Name_withoutPuncation ≠ thisTag_Name then
set thisTag_Aliases to aliases of thisTag
set thisTag_Aliases_list to my tid(thisTag_Aliases, {", ", "; ", ",", ";"})
if thisTag_Name_withoutPuncation is not in thisTag_Aliases_list then
set thisTag_Aliases_list_new to thisTag_Aliases_list & {thisTag_Name_withoutPuncation}
set thisTag_Aliases_new to my tid(thisTag_Aliases_list_new, theAliasesDelimiter)
set aliases of thisTag to thisTag_Aliases_new
end if
end if
end repeat
hide progress indicator
on error error_message number error_number
hide progress indicator
if the error_number is not -128 then display alert "DEVONthink" message error_message as warning
return
end try
end tell
on stripPunctuation(theText, theCharacterSet)
try
set theString to (current application's NSString's stringWithString:theText)
set theArray to theString's componentsSeparatedByCharactersInSet:(theCharacterSet)
set theString_withoutPunctuation to theArray's componentsJoinedByString:""
return theString_withoutPunctuation as string
on error error_message number error_number
activate
display alert "Error: Handler \"stripPunctuation\"" message error_message as warning
error number -128
end try
end stripPunctuation
on tid(theInput, theDelimiter)
set d to AppleScript's text item delimiters
set AppleScript's text item delimiters to theDelimiter
if class of theInput = text then
set theOutput to text items of theInput
else if class of theInput = list then
set theOutput to theInput as text
end if
set AppleScript's text item delimiters to d
return theOutput
end tid