27#include <Objectively/MutableArray.h>
32#define _Class _SelectorSequence
44 release(this->simpleSelectors);
56 return str(this->sequence);
59#pragma mark - SelectorSequence
105 while (isspace(*c)) {
130static Array *
parse(
const char *rule) {
134 MutableArray *selectorSequences = $$(MutableArray, arrayWithCapacity, 8);
135 assert(selectorSequences);
139 const char *c = rule;
141 const size_t size = strcspn(c,
" \n\t>+~");
143 char *sequence = calloc(1,
size + 1);
146 strncpy(sequence, c,
size);
149 assert(selectorSequence);
152 assert(selectorSequence->
right);
154 selectorSequence->
left = left;
155 left = selectorSequence->
right;
157 $(selectorSequences, addObject, selectorSequence);
159 release(selectorSequence);
164 c += strspn(c,
" \n\t>+~");
167 return (Array *) selectorSequences;
170#pragma mark - Class lifecycle
177 ((ObjectInterface *) clazz->interface)->dealloc =
dealloc;
178 ((ObjectInterface *) clazz->interface)->description =
description;
180 ((SelectorSequenceInterface *) clazz->interface)->initWithSequence =
initWithSequence;
182 ((SelectorSequenceInterface *) clazz->interface)->parse =
parse;
194 clazz = _initialize(&(
const ClassDef) {
195 .name =
"SelectorSequence",
196 .superclass = _Object(),
199 .interfaceSize =
sizeof(SelectorSequenceInterface),
static String * description(const Object *self)
static SequenceCombinator sequenceCombinator(const char *c)
static void dealloc(Object *self)
static void initialize(Class *clazz)
The SeletorSequence type.
SequenceCombinator
Combinators are operators for chaining SelectorSequences.
@ SequenceCombinatorTerminal
@ SequenceCombinatorAdjacent
@ SequenceCombinatorChild
@ SequenceCombinatorDescendent
@ SequenceCombinatorSibling
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
CollectionView * init(CollectionView *self, const SDL_Rect *frame)
Initializes this CollectionView with the specified frame and style.
SDL_Size size(const Image *self)
_Bool matchesView(const Selector *self, View *view)
Array * parse(const char *rules)
Parses the null-terminated C string of Selector rules into an Array of Selectors.
SelectorSequences are comprised of one or more SimpleSelectors.
_Bool matchesView(const SelectorSequence *self, const View *view)
SelectorSequence * initWithSequence(SelectorSequence *self, const char *sequence)
Initializes this SelectorSequence with the given sequence.
SequenceCombinator left
The combinators.
char * sequence
The sequence, as provided by the user.
Class * _SelectorSequence(void)
The SelectorSequence archetype.
Array * simpleSelectors
The SimpleSelectors comprising this SelectorSequence.
Views are the fundamental building blocks of ObjectivelyMVC user interfaces.
_Bool matchesSelector(const View *self, const SimpleSelector *simpleSelector)