diff --git a/src/TDTemplateEngine.m b/src/TDTemplateEngine.m index 701c830..b5b8d12 100644 --- a/src/TDTemplateEngine.m +++ b/src/TDTemplateEngine.m @@ -163,7 +163,7 @@ - (TDNode *)compileTemplateFile:(NSString *)path encoding:(NSStringEncoding)enc - (TDNode *)compileTemplateString:(NSString *)str error:(NSError **)err { - NSParameterAssert([str length]); + NSParameterAssert(str != nil); TDAssert([_printStartDelimiter length]); TDAssert([_printEndDelimiter length]); TDAssert([_tagStartDelimiter length]); diff --git a/src/TDTemplateParser.m b/src/TDTemplateParser.m index b65fd55..271f39e 100644 --- a/src/TDTemplateParser.m +++ b/src/TDTemplateParser.m @@ -75,6 +75,12 @@ - (void)template_ { self.currentParent = root; }]; + + if ([self predicts:TOKEN_KIND_BUILTIN_EOF, 0]) { + [self empty_]; + return; + } + do { [self content_]; } while ([self predicts:TOKEN_KIND_BUILTIN_ANY, 0]); @@ -204,4 +210,18 @@ - (void)text_ { } +- (void)empty_ { + + [self matchEOF:NO]; + + [self execute:^{ + + PKToken *tok = [PKToken tokenWithTokenType:PKTokenTypeWord stringValue:@"" doubleValue:0.0]; + TDNode *txtNode = [TDTextNode nodeWithToken:tok parent:_currentParent]; + [_currentParent addChild:txtNode]; + + }]; + +} + @end diff --git a/src/TDTextNode.m b/src/TDTextNode.m index 1ce8ce1..ed96974 100644 --- a/src/TDTextNode.m +++ b/src/TDTextNode.m @@ -34,7 +34,7 @@ - (void)dealloc { - (void)renderInContext:(TDTemplateContext *)ctx { NSParameterAssert(ctx); - TDAssert([self.token.stringValue length]); + TDAssert(self.token.stringValue != nil); [ctx writeString:self.token.stringValue]; } diff --git a/test/TDPrintNodeTests.m b/test/TDPrintNodeTests.m index cad7ea4..fcdbbe2 100644 --- a/test/TDPrintNodeTests.m +++ b/test/TDPrintNodeTests.m @@ -34,6 +34,18 @@ - (NSString *)outputString { return str; } +- (void)testEmptyPassthru { + NSString *input = @""; + id vars = nil; + + NSError *err = nil; + BOOL success = [_engine processTemplateString:input withVariables:vars toStream:_output error:&err]; + TDTrue(success); + TDNil(err); + NSString *res = [self outputString]; + TDEqualObjects(@"", res); +} + - (void)testAsciiPassthru { NSString *input = @"foo"; id vars = nil;