include "NSLog.incl" local fn BracketBalance( strWithBracket as CFStringRef ) as CFStringRef NSInteger i, bracketTracker = 0 CFStringRef result CFCharacterSetRef bracketSet = fn CharacterSetWithCharactersInString( @"[]" ) CFCharacterSetRef bracketsOnlySet = fn CharacterSetInvertedSet( bracketSet ) CFArrayRef trimmedSArray = fn StringComponentsSeparatedByCharactersInSet( strWithBracket, bracketsOnlySet ) CFStringRef trimmedStr = fn ArrayComponentsJoinedByString( trimmedSArray, @"" ) NSUInteger strLen = len( trimmedStr ) // Empty string, no brackets if ( strLen == 0 ) then result = @"No brackets" : exit fn // String with odd number of brackets is unbalanced if ( strLen mod 2 ) then result = @"Unbalanced" : exit fn for i = 0 to strLen - 1 CFStringRef bracket = fn StringWithFormat( @"%C", fn StringCharacterAtIndex( trimmedStr, i ) ) if fn StringisEqual( bracket, @"[" ) then bracketTracker++ if fn StringisEqual( bracket, @"]" ) then bracketTracker-- if bracketTracker < 0 then result = @"Unbalanced" : break next if bracketTracker == 0 then result = @"Balanced" end fn = result NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"" ) ), @"" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[" ) ), @"[" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"]" ) ), @"]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[]" ) ), @"[]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[]" ) ), @"[[]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[]]" ) ), @"[]]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[][]" ) ), @"[][]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][" ) ), @"][" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][][" ) ), @"][][" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[]][][][[][]]" ) ), @"[[]][][][[][]]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"][[]][][][]]][[" ) ), @"][[]][][][]]][[" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[[abc]][[d]]]]]" ) ), @"[[[abc]][[def]]]]]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[[[abc]]][[[[[d]]]]]" ) ), @"[[[abc]]][[[[[def]]]]]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"[][abc]]][[[[[d]]]]]" ) ), @"[][abc]]][[[[[def]]]]]" ) NSLog( @"%12s: %@", fn StringUTF8String( fn BracketBalance( @"The quick brown fox" ) ), @"The quick brown fox" ) HandleEvents