diff options
author | Alex Merry <dev@randomguy3.me.uk> | 2013-03-23 00:45:23 +0000 |
---|---|---|
committer | Alex Merry <dev@randomguy3.me.uk> | 2013-03-23 00:45:23 +0000 |
commit | 2aa4afed415b02add73c2dd5a3e9ccab90066d04 (patch) | |
tree | af135f127514fe047cb99b4f0c2ea7b87162acab /tikzit/src/common/TikzGraphAssembler.m | |
parent | dbd620bbaf7f28728c2686737b6a1453caaebd25 (diff) |
Make the parser more coherent
We build things up in stacks in the parser, rather than relying on
TikzGraphAssembler so much. This makes tikzparser.ym easier to follow
(IMHO).
Diffstat (limited to 'tikzit/src/common/TikzGraphAssembler.m')
-rw-r--r-- | tikzit/src/common/TikzGraphAssembler.m | 83 |
1 files changed, 16 insertions, 67 deletions
diff --git a/tikzit/src/common/TikzGraphAssembler.m b/tikzit/src/common/TikzGraphAssembler.m index 8400cf6..26bf515 100644 --- a/tikzit/src/common/TikzGraphAssembler.m +++ b/tikzit/src/common/TikzGraphAssembler.m @@ -77,29 +77,18 @@ int yywrap() { @implementation TikzGraphAssembler - (id)init { - [super init]; - graph = nil; - currentNode = nil; - currentEdge = nil; - nodeMap = nil; + self = [super init]; return self; } -- (Graph*)graph { return graph; } -- (NSError*)lastError { return lastError; } - -- (GraphElementData *)data { - if (currentNode != nil) { - return [currentNode data]; - } else if (currentEdge != nil) { - return [currentEdge data]; - } else { - return [graph data]; - } +- (void)dealloc { + [graph release]; + [lastError release]; + [super dealloc]; } -- (Node*)currentNode { return currentNode; } -- (Edge*)currentEdge { return currentEdge; } +- (Graph*)graph { return graph; } +- (NSError*)lastError { return lastError; } - (BOOL)parseTikz:(NSString *)tikz { return [self parseTikz:tikz forGraph:[Graph graph]]; @@ -170,55 +159,6 @@ int yywrap() { return r; } -- (void)prepareNode { - currentNode = [[Node alloc] init]; -} - -- (void)finishNode { - if (currentEdge != nil) { // this is an edge node - [currentEdge setEdgeNode:currentNode]; - } else { // this is a normal node - [graph addNode:currentNode]; - [nodeMap setObject:currentNode forKey:[currentNode name]]; - } - - [currentNode release]; - currentNode = nil; -} - -- (void)prepareEdge { - currentEdge = [[Edge alloc] init]; -} - -- (void)finishEdge { - [currentEdge setAttributesFromData]; - [graph addEdge:currentEdge]; - [currentEdge release]; - currentEdge = nil; -} - -- (void)setEdgeSource:(NSString*)edge anchor:(NSString*)anch { - Node *s = [nodeMap objectForKey:edge]; - [currentEdge setSource:s]; - [currentEdge setSourceAnchor:anch]; -} - -- (void)setEdgeTarget:(NSString*)edge anchor:(NSString*)anch { - if (![edge isEqualToString:@""]) { - [currentEdge setTarget:[nodeMap objectForKey:edge]]; - [currentEdge setTargetAnchor:anch]; - } else { - [currentEdge setTargetAnchor:anch]; - [currentEdge setTarget:[currentEdge source]]; - } -} - -- (void)dealloc { - [graph release]; - [lastError release]; - [super dealloc]; -} - - (void)invalidate { [graph release]; graph = nil; @@ -244,4 +184,13 @@ int yywrap() { @end +@implementation TikzGraphAssembler (Parser) +- (void)addNodeToMap:(Node*)n { + [nodeMap setObject:n forKey:[n name]]; +} +- (Node*)nodeWithName:(NSString*)name { + return [nodeMap objectForKey:name]; +} +@end + // vi:ft=objc:ts=4:noet:sts=4:sw=4 |