The behavior of PROPER has been improved in PSM 7. The result of PROPER("ann-marie") in PSM 7 will be "Ann-Marie", as expected.
I don't think there is an elegant way to accomplish this in PSM 6. You can try something like this, but it is limited to hyphens and it doesn't take into account that [Field] might contain spaces to begin with:
REPLACE(PROPER(REPLACE([Field], "-", " ")), " ", "-")
If you are familiar with macro's in PSM, perhaps you could use JavaScript instead. The following snippet seems to work okay for simple cases:
function toProperCase(s){
return s.toLowerCase().replace( /\b((m)(a?c))?(\w)/g,
function($1, $2, $3, $4, $5) {
if ($2){
return $3.toUpperCase() + $4 + $5.toUpperCase();
}
return $1.toUpperCase();
});
}