From 8cde489ab6c4169fb03d810447c18eea0d0eaa14 Mon Sep 17 00:00:00 2001 From: Alex Merry Date: Sat, 23 Mar 2013 03:30:19 +0000 Subject: Make the parser/lexer reentrant No more locking! Also, the interface for TikzGraphAssembler is much simpler. Changes to OSX code are completely untested. --- tikzit/src/osx/AppDelegate.m | 3 --- tikzit/src/osx/Graph+Coder.m | 3 +-- tikzit/src/osx/GraphicsView.m | 6 ++---- tikzit/src/osx/TikzFormatter.m | 3 +-- tikzit/src/osx/TikzSourceController.h | 3 +-- tikzit/src/osx/TikzSourceController.m | 12 ++++++------ 6 files changed, 11 insertions(+), 19 deletions(-) (limited to 'tikzit/src/osx') diff --git a/tikzit/src/osx/AppDelegate.m b/tikzit/src/osx/AppDelegate.m index 87d3ae0..affb95c 100644 --- a/tikzit/src/osx/AppDelegate.m +++ b/tikzit/src/osx/AppDelegate.m @@ -22,7 +22,6 @@ // #import "AppDelegate.h" -#import "TikzGraphAssembler.h" #import "TikzDocument.h" #import "Shape.h" #import "SupportDir.h" @@ -36,8 +35,6 @@ } - (void)awakeFromNib { - [TikzGraphAssembler setup]; // initialise lex/yacc parser globals - [SupportDir createUserSupportDir]; NSString *supportDir = [SupportDir userSupportDir]; //NSLog(stylePlist); diff --git a/tikzit/src/osx/Graph+Coder.m b/tikzit/src/osx/Graph+Coder.m index 6a3f650..7d3787e 100644 --- a/tikzit/src/osx/Graph+Coder.m +++ b/tikzit/src/osx/Graph+Coder.m @@ -13,8 +13,7 @@ - (id)initWithCoder:(NSCoder*)coder { NSString *tikz = [coder decodeObject]; - TikzGraphAssembler *ass = [[TikzGraphAssembler alloc] init]; - [ass parseTikz:tikz forGraph:self]; + [TikzGraphAssembler parseTikz:tikz forGraph:self]; return self; } diff --git a/tikzit/src/osx/GraphicsView.m b/tikzit/src/osx/GraphicsView.m index d5d6186..49b1af6 100644 --- a/tikzit/src/osx/GraphicsView.m +++ b/tikzit/src/osx/GraphicsView.m @@ -1099,11 +1099,9 @@ static CGColorRef cgGrayColor, cgWhiteColor, cgClearColor = nil; NSData *data = [cb dataForType:type]; NSString *tikz = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; //NSLog(@"pasting tikz:\n%@",tikz); - TikzGraphAssembler *ass = [[TikzGraphAssembler alloc] init]; - if ([ass parseTikz:tikz]) { + Graph *clip = [TikzGraphAssembler parseTikz:tikz]; + if (clip) { //NSLog(@"tikz pasted:\n%@",tikz); - Graph *clip = [ass graph]; - NSRect graphBounds = [graph bounds]; NSRect clipBounds = [clip bounds]; float dx = graphBounds.origin.x + diff --git a/tikzit/src/osx/TikzFormatter.m b/tikzit/src/osx/TikzFormatter.m index ecbb0bc..8972706 100644 --- a/tikzit/src/osx/TikzFormatter.m +++ b/tikzit/src/osx/TikzFormatter.m @@ -38,8 +38,7 @@ - (BOOL)getObjectValue:(out id *)obj forString:(NSString *)string errorDescription:(out NSString **)error{ *obj = [NSString stringWithString:string]; - TikzGraphAssembler *ass = [[TikzGraphAssembler alloc] init]; - BOOL r = [ass testTikz:string]; + BOOL r = [TikzGraphAssembler validateTikzPropertyNameOrValue:string]; if (!r && error) *error = NSLocalizedString(@"Invalid input, couldn't parse value.", @"tikz user input error"); diff --git a/tikzit/src/osx/TikzSourceController.h b/tikzit/src/osx/TikzSourceController.h index c829336..3408d9f 100644 --- a/tikzit/src/osx/TikzSourceController.h +++ b/tikzit/src/osx/TikzSourceController.h @@ -24,7 +24,6 @@ #import #import "GraphicsView.h" -#import "TikzGraphAssembler.h" #import "ParseErrorView.h" @interface TikzSourceController : NSObject { @@ -43,7 +42,7 @@ BOOL tikzChanged; BOOL justUndid; - TikzGraphAssembler *assembler; + NSError *lastError; } @property BOOL tikzChanged; diff --git a/tikzit/src/osx/TikzSourceController.m b/tikzit/src/osx/TikzSourceController.m index d05aa41..d01589b 100644 --- a/tikzit/src/osx/TikzSourceController.m +++ b/tikzit/src/osx/TikzSourceController.m @@ -22,6 +22,7 @@ // #import "TikzSourceController.h" +#import "TikzGraphAssembler.h" #import "Graph.h" @implementation TikzSourceController @@ -82,8 +83,6 @@ - (void)awakeFromNib { justUndid = NO; - assembler = [[TikzGraphAssembler alloc] init]; - successColor = [NSColor colorWithCalibratedRed:0.0f green:0.5f blue:0.0f @@ -143,11 +142,12 @@ } - (BOOL)tryParseTikz { - BOOL success = [assembler parseTikz:[self tikz]]; + Graph *g = [TikzGraphAssembler parseTikz:[self tikz] + error:&lastError]; - if (success) { + if (g) { [graphicsView deselectAll:self]; - [graphicsView setGraph:[assembler graph]]; + [graphicsView setGraph:g]; [graphicsView refreshLayers]; [self doRevertTikz]; } @@ -181,7 +181,7 @@ [status setStringValue:@"parse error"]; [status setTextColor:failedColor]; - NSDictionary *d = [[assembler lastError] userInfo]; + NSDictionary *d = [lastError userInfo]; NSString *ts = [NSString stringWithFormat: @"Parse error on line %@: %@\n", [d valueForKey:@"lineNumber"], [d valueForKey:NSLocalizedDescriptionKey]]; NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat: @"Parse error on line %@: %@\n%@\n", [d valueForKey:@"lineNumber"], [d valueForKey:NSLocalizedDescriptionKey], [[d valueForKey:@"syntaxString"] stringByReplacingOccurrencesOfString:@"\t" withString:@""]]]; -- cgit v1.2.3