BMXTRS ; IHS/OIT/HMW - UPPERCASE-LOWERCASE ; ;;2.1;BMX;;Jul 26, 2009 ; T(X) ;EP ;---> Translate word to mixed case. ; N BMXWORD,I I '$D(X) Q "" I X="^" Q X I X=" " Q X ;-----> REMOVE LEADING INAPPROPRIATE CHARACTERS IF PRESENT. F Q:$E(X)'?1P S X=$E(X,2,99) ;-----> CHANGE FIRST LETTER TO UPPERCASE: S BMXWORD=$E(X) I $E(BMXWORD)?1L S BMXWORD=$C($A($E(BMXWORD))-32) ;-----> DO NEXT CHARACTER F I=2:1:$L(X) D CHAR ;-----> REMOVE TRAILING SPACE OR QUOTE. F Q:""" "'[$E(BMXWORD,$L(BMXWORD)) D .S BMXWORD=$E(BMXWORD,1,($L(BMXWORD)-1)) ;-----> RESET X EQUAL TO RESULT EOJ ; Q BMXWORD ; CHAR ; ;-----> IF THE CHARACTER IS UPPERCASE AND PREVIOUS CHARACTER IS NOT ;-----> PUNCTUATION (EXCEPT FOR AN APOSTROPHY) OR A SPACE, ;-----> THEN CHANGE CHARACTER TO LOWERCASE: I ($E(X,I)?1U)&(($E(X,I-1)'?1P)!($E(X,I-1)="'")) D Q .S BMXWORD=BMXWORD_$C($A($E(X,I))+32) ; ;-----> IF THE CHARACTER IS LOWERCASE AND PREVIOUS CHARACTER IS ;-----> PUNCTUATION (BUT NOT AN APOSTROPHY) OR A SPACE, THEN CHANGE ;-----> CHARACTER TO UPPERCASE: I $E(X,I)?1L,$E(X,I-1)?1P,$E(X,I-1)'="'" D Q .S BMXWORD=BMXWORD_$C($A($E(X,I))-32) ; ;-----> ADD CHARACTER TO BMXWORD STRING WITHOUT MODIFICATION. ;-----> "\" PLACED BEFORE A LETTER FORCES IT TO BE UPPERCASE; ;-----> HERE REMOVE ANY "\"'s. I $E(X,I)'="\" S BMXWORD=BMXWORD_$E(X,I) Q