Thank you very much, Kasper! Even with an implementation, wow.. I will use your solution.

cheers
Siemen


On Sat, Oct 22, 2022 at 4:08 PM Kasper Osterbye <kasper.osterbye@gmail.com> wrote:
I took this a my afternoon code-quiz, so here is a solution if you want it:
splitCamelCase
�� �� �� �� | str split word|
�� �� �� �� "Split an expanded camelcase word into constituents. Extened camel case allow some words to be fully uppercase"
�� �� �� �� "'ZAPMeToo' splitCamelCase >>> #('ZAP' 'Me' 'Too')"
�� �� �� �� str := ReadStream on: self.
�� �� �� �� split := OrderedCollection new.
�� �� �� �� word := WriteStream on: ''.
�� �� �� �� [ str atEnd ] whileFalse: [ | char |
�� �� �� �� �� �� �� �� char := str next.
�� �� �� �� �� �� �� �� (char isUppercase and: [str atEnd or: [str peek isLowercase]])
�� �� �� �� �� �� �� �� �� �� �� �� ifTrue: [ split add: word contents. word := WriteStream on: '' ].
�� �� �� �� �� �� �� �� word nextPut: char ].
�� �� �� �� split add: word contents.
�� �� �� �� ^ split asArray

You should then use cute join and asLowercase to go rest of the way.

Best,

Kasper



> On 22 Oct 2022, at 14.53, Kasper Osterbye <kasper.osterbye@gmail.com> wrote:
>
> My feeling is that it cannot be solved by regular expressions. The reason it that there is the regular expressions in smalltalk/pharo does not have look-ahead or backtracking. In your example the capital Y is part of MY, but C starts a new word. I do not know of anyway to express that in smalltalk regular expressions.
>
> So I believe this is one of the cases where you add an extension method to string which does the job using plain coding.
>
> Best,
>
> Kasper
>
>> On 22 Oct 2022, at 10.56, Siemen Baader <siemenbaader@gmail.com> wrote:
>>
>> Hi,
>>
>> I'm looking for an elegant way to convert class names with optional namespace prefixes to names for custom html elements.
>>
>> MYCustomElement and CustomElement
>>
>> to
>> <my-custom-element> and <custom-element>
>>
>> There must be an elegant way to do it with regex or inject, but I'm embarrassed to say I can't get my head around it. I can get it to match the regex '((:isUppercase:+)*)((:isUppercase::isLowercase:+)*)', (if I recall correctly) but can't get a collection of the individual elements 'MY' 'Custom" 'Element' to lowercase and join.
>>
>> Thanks for any hints!
>>
>> cheers
>> Siemen
>