mirror of
https://github.com/nickshanks/ResKnife.git
synced 2024-12-27 04:29:37 +00:00
61 lines
1.7 KiB
Plaintext
61 lines
1.7 KiB
Plaintext
#import <Cocoa/Cocoa.h>
|
|
#import "ElementLSTC.h"
|
|
#import "ElementLSTE.h"
|
|
#import "ElementOCNT.h"
|
|
|
|
@implementation ElementLSTC
|
|
|
|
- (void)readSubElementsFrom:(TemplateStream *)stream
|
|
{
|
|
while([stream bytesToGo] > 0)
|
|
{
|
|
Element *element = [stream readOneElement];
|
|
if([[element type] isEqualToString:@"LSTE"])
|
|
break;
|
|
[subElements addObject:element];
|
|
}
|
|
}
|
|
|
|
- (void)readDataFrom:(TemplateStream *)stream
|
|
{
|
|
[self setCountElement:[stream counter]];
|
|
unsigned int itemsToGo = [countElement value];
|
|
unsigned int itemsToGoAtStart = itemsToGo;
|
|
|
|
// Read a first item:
|
|
if(itemsToGo > 0)
|
|
{
|
|
[self readDataForElements:stream];
|
|
itemsToGo--;
|
|
}
|
|
|
|
/* Read additional elements until we have enough items,
|
|
except if we're not the first item in our list. */
|
|
if(parentArray)
|
|
{
|
|
while(itemsToGo--)
|
|
{
|
|
// Actually read the item:
|
|
Element *nextItem = [[groupElementTemplate copy] autorelease]; // Make another list item just like this one.
|
|
[nextItem setParentArray:nil]; // Make sure it doesn't get into this "if" clause.
|
|
[parentArray addObject:nextItem]; // Add it below ourselves.
|
|
[nextItem readDataFrom:stream]; // Read it the same way we were.
|
|
[nextItem setParentArray:parentArray]; // Set parentArray *after* -readDataFrom: so it doesn't pass the if(parentArray) check above.
|
|
}
|
|
|
|
// now add a terminating 'LSTE' item, using this item's label
|
|
ElementLSTE *end = [ElementLSTE elementForType:@"LSTE" withLabel:label];
|
|
[parentArray addObject:end];
|
|
[end setParentArray:parentArray];
|
|
[end setGroupElementTemplate:groupElementTemplate];
|
|
[end setCountElement:countElement];
|
|
[stream popCounter];
|
|
|
|
// if it's an empty list delete this LSTC so we only have the empty LSTE.
|
|
if(itemsToGoAtStart == 0)
|
|
[parentArray removeObject:self];
|
|
}
|
|
}
|
|
|
|
@end
|