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 /tikzit | |
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.
Diffstat (limited to 'tikzit')
-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; |