Lembram daquela exemplo do layers maiúsculos e minúsculos? me ocorreu que derrepente eu posso querer só a primeira letra maiúscula e o resto minúscula… ou invertido, sei lá… mas o strcase so faz dum jeito ou do outro… entao bolei na corrida isto:
(defun strcase2 (str opcao / tmp s)
(cond
;tudo minusculo:
((or (equal t opcao)(= opcao “minus”))
(strcase str t))
;tudo maiusculo:
((or (null opcao) (= opcao “maius”))
(strcase str))
;primeira letra da sentença:
((= opcao “prma”)
(setq str (strcase str t))
(vl-string-subst
(strcase (substr str 1 1))
(substr str 1 1) str))
;primeira letra de cada sentença em maiusculo:
((= opcao “plsm”)
(setq str (strcase str t)
tmp nil)
(repeat (strlen str)
(setq s (substr str 1 1)
str (strcat (substr str 2 (strlen str))
(strcase s tmp))
tmp (not (wcmatch s “*.*”))))
str)
;inverter tudo:
((= opcao “invr”)
(repeat (strlen str)
(setq s (substr str 1 1)
str (strcat
(substr str 2 (strlen str))
(strcase s (= s (strcase s))))))
str)
;nenhuma das opções:
(t str)))
Para usar:
(strcase2 “abc def ghi” t) ou (strcase2 “abc def ghi” “minus”) -> “abc def ghi”
(strcase2 “abc def ghi” nil) ou (strcase2 “abc def ghi” “maius”) -> “ABC DEF GHI”
(strcase2 “abc def ghi” “prma”) -> “Abc def ghi”
(strcase2 “abc def ghi” “plsm”) -> “Abc Def Ghi”
(strcase2 “aBc dEf gHi” “invr”) -> “AbC DeF GhI”
assim ficou mais completo… depois eu coloco uma rotina completa usando isso