From 96bb49b438646b54f1a667a66a9bb1b2c27d7b4f Mon Sep 17 00:00:00 2001 From: Alex Merry Date: Tue, 29 May 2012 16:10:59 +0100 Subject: Fix handling for property values containing = or , Equals and comma are special values that need to be quoted with curly braces. This both parses and generates such quoted strings, although they are only generated when necessary. --- tikzit/src/common/GraphElementProperty.m | 10 +++++++++- tikzit/src/common/tikzlexer.lm | 6 +++--- tikzit/src/common/tikzparser.ym | 5 ++--- 3 files changed, 14 insertions(+), 7 deletions(-) (limited to 'tikzit') diff --git a/tikzit/src/common/GraphElementProperty.m b/tikzit/src/common/GraphElementProperty.m index 9751230..4b47ca6 100644 --- a/tikzit/src/common/GraphElementProperty.m +++ b/tikzit/src/common/GraphElementProperty.m @@ -118,7 +118,15 @@ } else if ([self isKeyMatch]) { return [NSString stringWithFormat:@"%@=*", [self key]]; } else { - return [NSString stringWithFormat:@"%@=%@", [self key], [self value]]; + static NSCharacterSet *avoid = nil; + if (avoid == nil) + avoid = [[NSCharacterSet characterSetWithCharactersInString:@",="] retain]; + + if ([[self value] rangeOfCharacterFromSet:avoid].length > 0) { + return [NSString stringWithFormat:@"%@={%@}", [self key], [self value]]; + } else { + return [NSString stringWithFormat:@"%@=%@", [self key], [self value]]; + } } } diff --git a/tikzit/src/common/tikzlexer.lm b/tikzit/src/common/tikzlexer.lm index c6deb3f..9418d83 100644 --- a/tikzit/src/common/tikzlexer.lm +++ b/tikzit/src/common/tikzlexer.lm @@ -77,19 +77,19 @@ at return AT; } \{ { - NSMutableString *buf = [NSMutableString stringWithString:@"{"]; + NSMutableString *buf = [NSMutableString string]; unsigned int brace_depth = 1; while (1) { char c = input(); // eof reached before closing brace if (c == '\0' || c == EOF) yyterminate(); - - [buf appendFormat:@"%c", c]; + if (c == '{') brace_depth++; else if (c == '}') { brace_depth--; if (brace_depth == 0) break; } + [buf appendFormat:@"%c", c]; } NSString *s = [buf copy]; diff --git a/tikzit/src/common/tikzparser.ym b/tikzit/src/common/tikzparser.ym index d8de575..57f0600 100644 --- a/tikzit/src/common/tikzparser.ym +++ b/tikzit/src/common/tikzparser.ym @@ -103,7 +103,7 @@ property: [p release]; }; -val: propsyms { $$ = $1; } | QUOTEDSTRING { $$ = $1; }; +val: propsyms { $$ = $1; } | QUOTEDSTRING { $$ = $1; } | DELIMITEDSTRING { $$ = $1; }; propsyms: propsym { $$ = $1; } | propsyms propsym @@ -132,8 +132,7 @@ nodelabel: DELIMITEDSTRING { Node *n = [[TikzGraphAssembler currentAssembler] currentNode]; - NSString *label = $1; - [n setLabel:[label substringWithRange:NSMakeRange(1, [label length]-2)]]; + [n setLabel:$1]; } optanchor: | ANCHORCENTER; -- cgit v1.2.3