summaryrefslogtreecommitdiff
path: root/tikzit
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@cs.ox.ac.uk>2012-05-29 16:10:59 +0100
committerAlex Merry <alex.merry@cs.ox.ac.uk>2012-05-29 16:10:59 +0100
commit96bb49b438646b54f1a667a66a9bb1b2c27d7b4f (patch)
tree4f617b1466645c730b2b939f8b15cf47042ac773 /tikzit
parentadb00e5861d749d073f42b18eb4c16dd0e893a07 (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.m10
-rw-r--r--tikzit/src/common/tikzlexer.lm6
-rw-r--r--tikzit/src/common/tikzparser.ym5
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;