1 | Func ___StringProper($sIn) |
---|
2 | Static Local $sRE = "(?:[ODL]'|Mc)([[:lower:]])|[IVXLCDM]([ivxlcdm]+)\b" |
---|
3 | ; If Not IsString($sIn) Then |
---|
4 | ; Return SetError(1, 0, "") |
---|
5 | ; EndIf |
---|
6 | Local $CapNext = 1 |
---|
7 | Local $sOut = "" |
---|
8 | Local $aStr = StringSplit(StringLower($sIn), "") |
---|
9 | Local $nLen = $aStr[0] |
---|
10 | Local $ix, $ch |
---|
11 | |
---|
12 | For $ix = 1 To $nLen |
---|
13 | $ch = $aStr[$ix] |
---|
14 | Select |
---|
15 | Case $CapNext = 1 |
---|
16 | If StringIsAlNum($ch) Or ($ch == "'") Then ;Or StringInStr("',", $ch) Then |
---|
17 | $ch = StringUpper($ch) |
---|
18 | $CapNext = 0 |
---|
19 | EndIf |
---|
20 | Case Not (StringIsAlnum($ch) Or ($ch == "'")) |
---|
21 | $CapNext = 1 |
---|
22 | EndSelect |
---|
23 | $sOut &= $ch |
---|
24 | Next |
---|
25 | |
---|
26 | $aStr = StringRegExp($sOut, $sRE, 1) |
---|
27 | While @error = 0 |
---|
28 | $ix = @extended |
---|
29 | $ch = $aStr[UBound($aStr)-1] |
---|
30 | $sOut = StringLeft($sOut, $ix-(StringLen($ch)+1)) & StringUpper($ch) & StringMid($sOut, $ix) |
---|
31 | $aStr = StringRegExp($sOut, $sRE, 1, $ix) |
---|
32 | WEnd |
---|
33 | |
---|
34 | Return SetError(0, $nLen, $sOut) |
---|
35 | EndFunc ;==>_StringProper |
---|