summaryrefslogtreecommitdiff
path: root/tikzit/src/common/TikzGraphAssembler.m
diff options
context:
space:
mode:
authorAlex Merry <dev@randomguy3.me.uk>2013-03-23 00:45:23 +0000
committerAlex Merry <dev@randomguy3.me.uk>2013-03-23 00:45:23 +0000
commit2aa4afed415b02add73c2dd5a3e9ccab90066d04 (patch)
treeaf135f127514fe047cb99b4f0c2ea7b87162acab /tikzit/src/common/TikzGraphAssembler.m
parentdbd620bbaf7f28728c2686737b6a1453caaebd25 (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.m83
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