Resolvi implementar um camel case stripper em Smalltalk (Pharo). Talvez fosse mais fácil fazê-lo usando expressões regulares mas usei técnicas de parsing. Veja o código abaixo:
Criando a class:
Object subclass: #CamelCaseStripper
instanceVariableNames: 'read word char write'
classVariableNames: ''
poolDictionaries: ''
category: 'FAM-Utils'
O método principal:
strip
"Ver CamelCaseStripper example"
self readChar.
self readWord.
[word isEmptyOrNil] whileFalse: [
write add: word.
self readWord.
].
^write asArray
A lógica para separar as ‘corcovas’:
readWord
| wordWrite |
wordWrite := WriteStream on: String new.
char ifNotNil:
[ char isLowercase
ifTrue: [ self writeLowercaseTo: wordWrite ]
ifFalse: [ "Uppercase"
wordWrite nextPut: char.
self readChar.
char ifNotNil: [
char isUppercase ifTrue: [
self writeUppercaseTo: wordWrite]
ifFalse: [
self writeLowercaseTo: wordWrite
]
]
]
].
word := wordWrite contents
E, finalmente, os métodos chamados:
writeLowercaseTo: wordWrite
[ char notNil and: [ char isLowercase ] ] whileTrue:
[ wordWrite nextPut: char.
self readChar ]
e
writeUppercaseTo: wordWrite
[ char notNil and: [ char isUppercase ] and: [self nextChar isUppercase]] whileTrue:
[ wordWrite nextPut: char.
self readChar ]
No class side veja como usar a classe:
example
|stripper|
stripper := CamelCaseStripper from: 'prefixWABrushTag'.
stripper strip "--> #('prefix' 'WA' 'Brush' 'Tag')"
Outros detalhes podem ser vistos em CamelCaseStripper.st.
Coloquei também um método de conveniência em String:
camelCaseStrip
^(CamelCaseStripper from: self) strip
Agora o uso fica como a seguir:
'ABCdefGHIjk' camelCaseStrip "--> #('AB' 'Cdef' 'GH' 'Ijk')"
Nota: Estou usando o site http://www.hilite.me/ para code beautifier mas não estou gostando das barras de rolagem horizontais. Acho que a identação do hilite me é exagerada. No futuro vou tentar usar http://pastie.org (acho que precisa de um plugin para o WordPress: Show Pastie Code in Comments WordPress Plugin).
Categorias: Smalltalk

Estou planejando ir do Rio até Aracaju de carro. Achei umas dicas legais do Ricardo Freire para fazer uma parada em Cumuruxatiba e/ou Corumbau, na Bahia.
Categorias: Cidade & Região · Viagem
Em andamento a operação de resgate de Alexandre Scizzi, do Phoenix (serie), participante da regata Minitransat.

O velejador já foi encontrado e está velejando em direção à costa da Bahia.
Categorias: Esporte · Evento · Notícias · Vela
Categorias: Mac · Software

Os primeiros lugares dos protos (Thomas Ruyant) e series (Charles Dalin) já chegaram em Salvador. Izabel Pimentel (a única representante do Brasil na competição) já passou de Fernando de Noronha e melhorou a sua colocação (da posição 28 para a 27). Veja a sua posição no mapa abaixo.

Veja abaixo o vídeo do primeiro colocado.
Categorias: Cidade & Região · Esporte · Evento · Notícias · Vela

Este post continua a saga do defeito no iMac. A tela agora está toda tomada. Vou enviar a foto também para http://imacdefeituoso.blogspot.com. Até agora estou me virando conectando uma TV LCD via HDMI.
Categorias: Cotidiano · Mac

Instalei o RubyStack da BitNami no Mac. Testei um hello world no Rails. Sem problemas até agora exceto o costumeiro
Routing Error
No route matches "/test" with {:method=>:get}
que pode ser sanado com um restart do server.
Pretendo começar a testar o Cucumber.
Categorias: Rails · Ruby · Software · Tecnologia

Começou a maratona do Festival do Rio 2009.
O que já assisti:
Sexta, 25/9
- O desinformante (19:00 Leblon 1, com Iane e Natacha) <– Curioso (Regular)
Sábado, 26/9
- Um namorado para minha esposa (15:15 Estação Ipanema 1) <– Bom
- Viagem aos Pirineus (que substituiu o `Rei da fuga`, 18:00 Estação Ipanema 1) <– O melhor do sábado (Ótimo)
- Eterno Feitiço (20:10 Estação Ipanema 2, com Iane) <– Bonito
Domingo, 27/9:
- As praias de Agnes (2) (15:50 Estação Vivo Gávea 2, com Iane) <– Bom
Terça, 29/9:
- A pequenina (2) (17:30 Ipanema 1) (Não vimos. Faltou luz.)
Quinta, 1/10:
- Distrito 9 (21:30 Leblon 1) <— Razoável
Sexta, 2/10:
- Fais-moi Plaisir!, 19:00 (2) (Roxy 3) <— Ótimo. Divertido. A platéia deu boas gargalhadas.
Domingo, 4/10:
- Ricky (2), (15:20 Estação Vivo Gávea 5) <— Esperava mais. Não gostei. Mal alinhavado.
Terça, 6/10:
- Coco antes de Chanel (2) (19:00 Leblon 1) <— Bom.
Quarta, 7/10:
- Aconteceu em Woodstock (2) (21:30 Leblon 1) <— Regular
Categorias: Cinema