Function xProper && Extended Proper() Fox Function *-------- ------- LParameters pSourceStr Private cSourceStr, nSourceLen, cObjectStr, bMustUpper, I, cChar, cIns If Empty (pSourceStr) Return "" endif cSourceStr = pSourceStr nSourceLen = Len (pSourceStr) cObjectStr = "" bMustUpper = .T. For I = 1 to nSourceLen cChar = Substr (cSourceStr, I, 1) cIns = cChar If ! Empty (cChar) If IsAlpha (cChar) If bMustUpper cIns = Upper (cIns) else cIns = Lower (cIns) endif bMustUpper = .F. else bMustUpper = .T. endif else bMustUpper = .T. endif cObjectStr = cObjectStr + cIns EndFor cObjectStr = cObjectStr + Space (1) cObjectStr = StrTran (cObjectStr, " Da " , " da " ) cObjectStr = StrTran (cObjectStr, " Do " , " do " ) cObjectStr = StrTran (cObjectStr, " De " , " de " ) cObjectStr = StrTran (cObjectStr, " Das ", " das ") cObjectStr = StrTran (cObjectStr, " Dos ", " dos ") cObjectStr = StrTran (cObjectStr, " A " , " a " ) cObjectStr = StrTran (cObjectStr, " O " , " o " ) cObjectStr = StrTran (cObjectStr, " As " , " as " ) cObjectStr = StrTran (cObjectStr, " Os " , " os " ) cObjectStr = StrTran (cObjectStr, " E " , " e " ) cObjectStr = StrTran (cObjectStr, " É " , " é " ) cObjectStr = StrTran (cObjectStr, " Em " , " em " ) cObjectStr = StrTran (cObjectStr, " Na " , " na " ) cObjectStr = StrTran (cObjectStr, " No " , " no " ) Return Left (cObjectStr, nSourceLen) EndFunc && Of xProperHope it helps,