diff --git a/basis/unicode/case/case.factor b/basis/unicode/case/case.factor index d14c765f4c..e19fd2ba84 100644 --- a/basis/unicode/case/case.factor +++ b/basis/unicode/case/case.factor @@ -17,10 +17,10 @@ SYMBOL: locale ! Just casing locale, or overall? : replace ( old new str -- newstr ) [ split-subseq ] dip join ; inline -: i-dot? ( -- ? ) - locale get { "tr" "az" } member? ; +: i-dot? ( locale -- ? ) + { "tr" "az" } member? ; inline -: lithuanian? ( -- ? ) locale get "lt" = ; +: lithuanian? ( locale -- ? ) "lt" = ; inline : lithuanian>upper ( string -- lower ) "i\u000307" "i" replace @@ -80,19 +80,26 @@ SYMBOL: locale ! Just casing locale, or overall? [ char-quot call out push ] ?if ] each out "" like ; inline +: locale>lower ( string -- string' ) + locale get + [ i-dot? [ turk>lower ] when ] + [ lithuanian? [ lithuanian>lower ] when ] bi ; + +: locale>upper ( string -- string' ) + locale get + [ i-dot? [ turk>upper ] when ] + [ lithuanian? [ lithuanian>upper ] when ] bi ; + PRIVATE> : >lower ( string -- lower ) - i-dot? [ turk>lower ] when - lithuanian? [ lithuanian>lower ] when - final-sigma + locale>lower final-sigma [ lower>> ] [ ch>lower ] map-case ; HINTS: >lower string ; : >upper ( string -- upper ) - i-dot? [ turk>upper ] when - lithuanian? [ lithuanian>upper ] when + locale>upper [ upper>> ] [ ch>upper ] map-case ; HINTS: >upper string ; @@ -100,8 +107,7 @@ HINTS: >upper string ; title) ( string -- title ) - i-dot? [ turk>upper ] when - lithuanian? [ lithuanian>upper ] when + locale>upper [ title>> ] [ ch>title ] map-case ; inline PRIVATE>