diff options
author | Alex Merry <alex.merry@cs.ox.ac.uk> | 2012-05-29 16:10:59 +0100 |
---|---|---|
committer | Alex Merry <alex.merry@cs.ox.ac.uk> | 2012-05-29 16:10:59 +0100 |
commit | 96bb49b438646b54f1a667a66a9bb1b2c27d7b4f (patch) | |
tree | 4f617b1466645c730b2b939f8b15cf47042ac773 | |
parent | adb00e5861d749d073f42b18eb4c16dd0e893a07 (diff) |
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.
-rw-r--r-- | tikzit/src/common/GraphElementProperty.m | 10 | ||||
-rw-r--r-- | tikzit/src/common/tikzlexer.lm | 6 | ||||
-rw-r--r-- | tikzit/src/common/tikzparser.ym | 5 |
3 files changed, 14 insertions, 7 deletions
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 { $$ = $<nsstr>1; } | QUOTEDSTRING { $$ = $<nsstr>1; }; +val: propsyms { $$ = $<nsstr>1; } | QUOTEDSTRING { $$ = $<nsstr>1; } | DELIMITEDSTRING { $$ = $<nsstr>1; }; propsyms: propsym { $$ = $<nsstr>1; } | propsyms propsym @@ -132,8 +132,7 @@ nodelabel: DELIMITEDSTRING { Node *n = [[TikzGraphAssembler currentAssembler] currentNode]; - NSString *label = $<nsstr>1; - [n setLabel:[label substringWithRange:NSMakeRange(1, [label length]-2)]]; + [n setLabel:$<nsstr>1]; } optanchor: | ANCHORCENTER; |