From b111c21337b30eafd5512f4952f31f1baec7158c Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 10:53:15 +0200 Subject: [PATCH 01/26] added unit test for simple UL list --- Test/Source/DTMarkdownParserTest.m | 32 ++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index b9061ff..dd4e47d 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -956,6 +956,38 @@ - (void)testFencedCodeBlock STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +#pragma mark - Lists + +- (void)testSimpleList +{ + NSString *string = @"Normal\n * one\n * two\n * three"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + +- (void)testSimpleListWithEmptyLinesBefore +{ + NSString *string = @"Normal\n\n\n * one\n * two\n * three"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + #pragma mark - Test Files - (void)testEmphasis From 9e69b62bac150910acdf68018dc4bab098ebfd88 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 10:56:55 +0200 Subject: [PATCH 02/26] implemented simple UL/LI --- Core/Source/DTMarkdownParser.m | 64 +++++++++++++++++++++- Core/Source/NSScanner+DTMarkdown.h | 3 + Core/Source/NSScanner+DTMarkdown.m | 50 +++++++++++++++++ DTMarkdownParser.xcodeproj/project.pbxproj | 4 +- 4 files changed, 117 insertions(+), 4 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index a310bb8..0c353e0 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -20,6 +20,7 @@ NSString * const DTMarkdownParserSpecialFencedPreStart = @""; NSString * const DTMarkdownParserSpecialFencedPreCode = @""; NSString * const DTMarkdownParserSpecialFencedPreEnd = @""; +NSString * const DTMarkdownParserSpecialList = @""; @implementation DTMarkdownParser { @@ -379,6 +380,44 @@ - (void)_processLine:(NSString *)line } } +- (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex +{ + NSScanner *scanner = [NSScanner scannerWithString:line]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + [scanner scanListPrefix:&prefix]; + NSAssert(prefix, @"Cannot process line, no list prefix"); + + // need to close previous p if there was one + if ([[self _currentTag] isEqualToString:@"p"]) + { + [self _popTag]; + } + + // cut off prefix + line = [line substringFromIndex:scanner.scanLocation]; + + // open UL if necessary + if (![[self _currentTag] isEqualToString:@"ul"]) + { + [self _pushTag:@"ul" attributes:nil]; + } + + [self _pushTag:@"li" attributes:nil]; + + // process line as normal without prefix + [self _processLine:line]; + + [self _popTag]; // li + + if ([_ignoredLines containsIndex:lineIndex+1]) + { + [self _popTag]; + } +} + - (void)_findAndMarkSpecialLines { _ignoredLines = [NSMutableIndexSet new]; @@ -510,6 +549,19 @@ - (void)_findAndMarkSpecialLines _specialLines[@(lineIndex)] = DTMarkdownParserSpecialFencedPreCode; } } + + if (!didFindSpecial) + { + NSScanner *lineScanner = [NSScanner scannerWithString:line]; + lineScanner.charactersToBeSkipped = nil; + + NSString *listPrefix; + if ([lineScanner scanListPrefix:&listPrefix]) + { + _specialLines[@(lineIndex)] = DTMarkdownParserSpecialList; + didFindSpecial = YES; + } + } } // look for empty lines @@ -550,6 +602,8 @@ - (BOOL)parse while (![scanner isAtEnd]) { + NSUInteger currentLineIndex = lineIndex; + NSString *line; if ([scanner scanUpToString:@"\n" intoString:&line]) { @@ -599,7 +653,13 @@ - (BOOL)parse NSString *tag = nil; NSUInteger headerLevel = 0; - if (specialLine == DTMarkdownParserSpecialTagPre || specialLine == DTMarkdownParserSpecialFencedPreCode) + if (specialLine == DTMarkdownParserSpecialList) + { + [self _processListLine:line lineIndex:currentLineIndex]; + + continue; + } + else if (specialLine == DTMarkdownParserSpecialTagPre || specialLine == DTMarkdownParserSpecialFencedPreCode) { NSString *codeLine; @@ -703,7 +763,7 @@ - (BOOL)parse tag = [NSString stringWithFormat:@"h%d", (int)headerLevel]; } - BOOL willCloseTag = (hasTwoNL || headerLevel || !shouldOutputLineText || followingLineIsIgnored); + BOOL willCloseTag = (hasTwoNL || headerLevel || !shouldOutputLineText || followingLineIsIgnored || specialFollowingLine == DTMarkdownParserSpecialList); // handle new lines if (shouldOutputLineText && !hasTwoNL && ![scanner isAtEnd]) diff --git a/Core/Source/NSScanner+DTMarkdown.h b/Core/Source/NSScanner+DTMarkdown.h index 26f33d4..598b5b7 100644 --- a/Core/Source/NSScanner+DTMarkdown.h +++ b/Core/Source/NSScanner+DTMarkdown.h @@ -16,4 +16,7 @@ // returns yes if the current line contained a valid markdown hyperlink reference - (BOOL)scanMarkdownHyperlinkReferenceLine:(NSString **)reference URLString:(NSString **)URLString title:(NSString **)title; +// returns `YES` if a valid list prefix was scanned +- (BOOL)scanListPrefix:(NSString **)prefix; + @end diff --git a/Core/Source/NSScanner+DTMarkdown.m b/Core/Source/NSScanner+DTMarkdown.m index 1fe07e8..31d3c3d 100644 --- a/Core/Source/NSScanner+DTMarkdown.m +++ b/Core/Source/NSScanner+DTMarkdown.m @@ -155,4 +155,54 @@ - (BOOL)scanMarkdownHyperlinkReferenceLine:(NSString **)reference URLString:(NSS return YES; } +- (BOOL)scanListPrefix:(NSString **)prefix +{ + NSUInteger startPos = self.scanLocation; + + // up to 3 spaces + NSCharacterSet *space = [NSCharacterSet characterSetWithCharactersInString:@" "]; + NSString *spaces; + + if ([self scanCharactersFromSet:space intoString:&spaces]) + { + if ([spaces length]>3) + { + self.scanLocation = startPos; + return NO; + } + } + + // scan prefix + NSString *foundPrefix; + + if (![self scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:&foundPrefix]) + { + self.scanLocation = startPos; + return NO; + } + + + // whitespace + if (![self scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL]) + { + self.scanLocation = startPos; + return NO; + } + + // check if it is a valid prefix + + if (![foundPrefix isEqualToString:@"*"]) + { + self.scanLocation = startPos; + return NO; + } + + if (prefix) + { + *prefix = foundPrefix; + } + + return YES; +} + @end diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index f40845e..1f37c08 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -985,12 +985,12 @@ A7BF253418112C8B0013D8D7 /* Source */ = { isa = PBXGroup; children = ( - A7D7DF2118155ED300F4377D /* NSString+DTMarkdown.h */, - A7D7DF2218155ED300F4377D /* NSString+DTMarkdown.m */, A7BF253C181131A70013D8D7 /* DTMarkdownParserTest.m */, A7D7DF261815740000F4377D /* NSScannerDTMarkdownTest.m */, A765C45D18116AF9006B252A /* NSInvocation+DTFoundation.h */, A765C45E18116AF9006B252A /* NSInvocation+DTFoundation.m */, + A7D7DF2118155ED300F4377D /* NSString+DTMarkdown.h */, + A7D7DF2218155ED300F4377D /* NSString+DTMarkdown.m */, A765C46118117EE5006B252A /* DTInvocationRecorder.h */, A765C46218117EE5006B252A /* DTInvocationRecorder.m */, A765C4671811906B006B252A /* DTInvocationTestFunctions.h */, From f2a74b1dd41d9032842d1939f8102c7e4829affe Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 11:06:14 +0200 Subject: [PATCH 03/26] added list prefix scanner unit tests --- Test/Source/NSScannerDTMarkdownTest.m | 92 +++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) diff --git a/Test/Source/NSScannerDTMarkdownTest.m b/Test/Source/NSScannerDTMarkdownTest.m index 3be7fda..7c79b34 100644 --- a/Test/Source/NSScannerDTMarkdownTest.m +++ b/Test/Source/NSScannerDTMarkdownTest.m @@ -193,4 +193,96 @@ - (void)testRefWithInvalidHyperlink STAssertNil(ref, @"href should be nil"); } +#pragma mark - List Prefix + +- (void)testScanListPrefixTooManySpaces +{ + NSString *string = @" * one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertFalse(b, @"Should not be able to scan list prefix"); + STAssertNil(prefix, @"prefix should be nil"); +} + +- (void)testScanListPrefixMissingWhitespace +{ + NSString *string = @"*one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertFalse(b, @"Should not be able to scan list prefix"); + STAssertNil(prefix, @"prefix should be nil"); +} + +- (void)testScanListPrefixAsterisk +{ + NSString *string = @" * one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertTrue(b, @"Should be able to scan list prefix"); + STAssertEqualObjects(prefix, @"*", @"prefix incorrect"); +} + +- (void)testScanListPrefixPlus +{ + NSString *string = @" + one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertTrue(b, @"Should be able to scan list prefix"); + STAssertEqualObjects(prefix, @"+", @"prefix incorrect"); +} + +- (void)testScanListPrefixMinus +{ + NSString *string = @" + one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertTrue(b, @"Should be able to scan list prefix"); + STAssertEqualObjects(prefix, @"+", @"prefix incorrect"); +} + +- (void)testScanListPrefixInvalid +{ + NSString *string = @" _ one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertFalse(b, @"Should not be able to scan list prefix"); + STAssertNil(prefix, @"prefix should be nil"); +} + @end From 09b6389990c733513a8ed2b41b37bc5e9a935f55 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 11:06:32 +0200 Subject: [PATCH 04/26] renamed list prefix method --- Core/Source/DTMarkdownParser.m | 4 ++-- Core/Source/NSScanner+DTMarkdown.h | 2 +- Core/Source/NSScanner+DTMarkdown.m | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index 0c353e0..c5f33e4 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -387,7 +387,7 @@ - (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex NSString *prefix; - [scanner scanListPrefix:&prefix]; + [scanner scanMarkdownLineListPrefix:&prefix]; NSAssert(prefix, @"Cannot process line, no list prefix"); // need to close previous p if there was one @@ -556,7 +556,7 @@ - (void)_findAndMarkSpecialLines lineScanner.charactersToBeSkipped = nil; NSString *listPrefix; - if ([lineScanner scanListPrefix:&listPrefix]) + if ([lineScanner scanMarkdownLineListPrefix:&listPrefix]) { _specialLines[@(lineIndex)] = DTMarkdownParserSpecialList; didFindSpecial = YES; diff --git a/Core/Source/NSScanner+DTMarkdown.h b/Core/Source/NSScanner+DTMarkdown.h index 598b5b7..4324fc9 100644 --- a/Core/Source/NSScanner+DTMarkdown.h +++ b/Core/Source/NSScanner+DTMarkdown.h @@ -17,6 +17,6 @@ - (BOOL)scanMarkdownHyperlinkReferenceLine:(NSString **)reference URLString:(NSString **)URLString title:(NSString **)title; // returns `YES` if a valid list prefix was scanned -- (BOOL)scanListPrefix:(NSString **)prefix; +- (BOOL)scanMarkdownLineListPrefix:(NSString **)prefix; @end diff --git a/Core/Source/NSScanner+DTMarkdown.m b/Core/Source/NSScanner+DTMarkdown.m index 31d3c3d..ee9511f 100644 --- a/Core/Source/NSScanner+DTMarkdown.m +++ b/Core/Source/NSScanner+DTMarkdown.m @@ -155,7 +155,7 @@ - (BOOL)scanMarkdownHyperlinkReferenceLine:(NSString **)reference URLString:(NSS return YES; } -- (BOOL)scanListPrefix:(NSString **)prefix +- (BOOL)scanMarkdownLineListPrefix:(NSString **)prefix { NSUInteger startPos = self.scanLocation; @@ -191,7 +191,7 @@ - (BOOL)scanListPrefix:(NSString **)prefix // check if it is a valid prefix - if (![foundPrefix isEqualToString:@"*"]) + if (![foundPrefix isEqualToString:@"*"] && ![foundPrefix isEqualToString:@"+"] && ![foundPrefix isEqualToString:@"-"]) { self.scanLocation = startPos; return NO; From 83b1f111bd6e0d8d42fb7c60c9080c8dec448007 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 11:12:35 +0200 Subject: [PATCH 05/26] added scanning for OL LI prefix --- Core/Source/NSScanner+DTMarkdown.m | 13 +++++++++++- Test/Source/NSScannerDTMarkdownTest.m | 29 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/Core/Source/NSScanner+DTMarkdown.m b/Core/Source/NSScanner+DTMarkdown.m index ee9511f..1d0616c 100644 --- a/Core/Source/NSScanner+DTMarkdown.m +++ b/Core/Source/NSScanner+DTMarkdown.m @@ -191,7 +191,18 @@ - (BOOL)scanMarkdownLineListPrefix:(NSString **)prefix // check if it is a valid prefix - if (![foundPrefix isEqualToString:@"*"] && ![foundPrefix isEqualToString:@"+"] && ![foundPrefix isEqualToString:@"-"]) + if ([foundPrefix hasSuffix:@"."]) + { + NSString *numberPart = [foundPrefix substringToIndex:[foundPrefix length]-1]; + + // can only be digits before the period + if ([[numberPart stringByTrimmingCharactersInSet:[NSCharacterSet decimalDigitCharacterSet]] length]) + { + self.scanLocation = startPos; + return NO; + } + } + else if (![foundPrefix isEqualToString:@"*"] && ![foundPrefix isEqualToString:@"+"] && ![foundPrefix isEqualToString:@"-"]) { self.scanLocation = startPos; return NO; diff --git a/Test/Source/NSScannerDTMarkdownTest.m b/Test/Source/NSScannerDTMarkdownTest.m index 7c79b34..d559cc5 100644 --- a/Test/Source/NSScannerDTMarkdownTest.m +++ b/Test/Source/NSScannerDTMarkdownTest.m @@ -285,4 +285,33 @@ - (void)testScanListPrefixInvalid STAssertNil(prefix, @"prefix should be nil"); } +- (void)testScanListPrefixNumber +{ + NSString *string = @" 1. one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertTrue(b, @"Should be able to scan list prefix"); + STAssertEqualObjects(prefix, @"1.", @"prefix incorrect"); +} + +- (void)testScanListPrefixInvalidNumber +{ + NSString *string = @" a1. one"; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertFalse(b, @"Should not be able to scan list prefix"); + STAssertNil(prefix, @"prefix should be nil"); +} @end From 8b751344c57625e8f4db4304913bb83bc82fb88a Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 11:18:03 +0200 Subject: [PATCH 06/26] implemented mixing of list prefixes --- Core/Source/DTMarkdownParser.m | 15 ++++++++-- Test/Source/DTMarkdownParserTest.m | 45 ++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index c5f33e4..defb9f5 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -399,10 +399,19 @@ - (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex // cut off prefix line = [line substringFromIndex:scanner.scanLocation]; - // open UL if necessary - if (![[self _currentTag] isEqualToString:@"ul"]) + if (![[self _currentTag] isEqualToString:@"ul"] && ![[self _currentTag] isEqualToString:@"ol"]) { - [self _pushTag:@"ul" attributes:nil]; + // need to open list + if ([prefix hasSuffix:@"."]) + { + // ordered list + [self _pushTag:@"ol" attributes:nil]; + } + else + { + // unordered list + [self _pushTag:@"ul" attributes:nil]; + } } [self _pushTag:@"li" attributes:nil]; diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index dd4e47d..c4a5d8f 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -973,6 +973,21 @@ - (void)testSimpleList STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testSimpleListWithMixedPrefixes +{ + NSString *string = @"Normal\n * one\n 1. two\n 2. three"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n
  • one
  • two
  • three
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + - (void)testSimpleListWithEmptyLinesBefore { NSString *string = @"Normal\n\n\n * one\n * two\n * three"; @@ -988,6 +1003,36 @@ - (void)testSimpleListWithEmptyLinesBefore STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testSimpleOrderedList +{ + NSString *string = @"Normal\n 1. one\n 2. two\n 3. three"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n
  1. one
  2. two
  3. three
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + +- (void)testSimpleOrderedListWithMixedPrefixes +{ + NSString *string = @"Normal\n 1. one\n * two\n * three"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n
  1. one
  2. two
  3. three
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + #pragma mark - Test Files - (void)testEmphasis From 35de6d77b18635f0e58f64b2e41b96506f21ae34 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 18:47:33 +0200 Subject: [PATCH 07/26] added missing branch test --- Test/Source/NSScannerDTMarkdownTest.m | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Test/Source/NSScannerDTMarkdownTest.m b/Test/Source/NSScannerDTMarkdownTest.m index d559cc5..11ec620 100644 --- a/Test/Source/NSScannerDTMarkdownTest.m +++ b/Test/Source/NSScannerDTMarkdownTest.m @@ -314,4 +314,20 @@ - (void)testScanListPrefixInvalidNumber STAssertFalse(b, @"Should not be able to scan list prefix"); STAssertNil(prefix, @"prefix should be nil"); } + +- (void)testScanListPrefixOnlySpaces +{ + NSString *string = @" "; + + NSScanner *scanner = [NSScanner scannerWithString:string]; + scanner.charactersToBeSkipped = nil; + + NSString *prefix; + + BOOL b = [scanner scanMarkdownLineListPrefix:&prefix]; + + STAssertFalse(b, @"Should not be able to scan list prefix"); + STAssertNil(prefix, @"prefix should be nil"); +} + @end From 6c530dc8089f334381541e0c3b1ca1c8f998ffe5 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 18:50:15 +0200 Subject: [PATCH 08/26] fixed coverage --- Core/Source/DTMarkdownParser.m | 8 ++------ Test/Source/DTMarkdownParserTest.m | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index defb9f5..6507ba0 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -389,12 +389,8 @@ - (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex [scanner scanMarkdownLineListPrefix:&prefix]; NSAssert(prefix, @"Cannot process line, no list prefix"); - - // need to close previous p if there was one - if ([[self _currentTag] isEqualToString:@"p"]) - { - [self _popTag]; - } + + NSAssert(![[self _currentTag] isEqualToString:@"p"], @"There should never be an open P tag in %s", __PRETTY_FUNCTION__); // cut off prefix line = [line substringFromIndex:scanner.scanLocation]; diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index c4a5d8f..731ee8e 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -1003,6 +1003,21 @@ - (void)testSimpleListWithEmptyLinesBefore STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testSimpleListWithEmptyLinesAfter +{ + NSString *string = @"Normal\n * one\n * two\n * three\n\n\n"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n
  • one
  • two
  • three
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + - (void)testSimpleOrderedList { NSString *string = @"Normal\n 1. one\n 2. two\n 3. three"; From 635568401a5a08494926e51ae08996e8d3dd8726 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 18:50:57 +0200 Subject: [PATCH 09/26] moved single level lists to implemented --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e29c73d..2971573 100644 --- a/README.md +++ b/README.md @@ -46,11 +46,11 @@ Implemented - Hyperlinks (inline and reference) - Images (inline and reference) - Linebreaks Handling (GitHub versus Gruber) +- lists (ordered or unordered) To Do ----- -- lists (ordered or unordered) - lists (stacked) - inline HTML (? should we ever do this ?) - character escaping From 0b07daf79df4f4388513dab0a0a06bcf9828e219 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Tue, 22 Oct 2013 20:54:12 +0200 Subject: [PATCH 10/26] added missing test case --- Test/Source/DTMarkdownParserTest.m | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index 731ee8e..41b456a 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -1018,6 +1018,21 @@ - (void)testSimpleListWithEmptyLinesAfter STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testSimpleListWithIgnoredLineAfter +{ + NSString *string = @"Normal\n * one\n * two\n * three\n[id]: http://foo.com"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Normal

\n
  • one
  • two
  • three
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + - (void)testSimpleOrderedList { NSString *string = @"Normal\n 1. one\n 2. two\n 3. three"; From 488a7c4e33e31c637e73277164d943d2070a9192 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 10:16:01 +0200 Subject: [PATCH 11/26] updated to do list --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 2971573..6450d87 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,10 @@ To Do ----- - lists (stacked) -- inline HTML (? should we ever do this ?) +- auto linking of http URLs +- forced linking via angle brackets - character escaping +- inline HTML (? should we ever do this ?) - multiple-level quoting and code blocks - additional useful markdown extensions - proper reporting of applicable processed range of text, e.g. to use for syntax highlighting From cddaf32e401920d2471d91c8e7ee126d630caa35 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 10:20:31 +0200 Subject: [PATCH 12/26] update read me, add reference links --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index 6450d87..0c3c3b6 100644 --- a/README.md +++ b/README.md @@ -59,3 +59,10 @@ To Do - multiple-level quoting and code blocks - additional useful markdown extensions - proper reporting of applicable processed range of text, e.g. to use for syntax highlighting + +Markdown References +------------------- + +- John Gruber's [Markdown Syntax Documentation](http://daringfireball.net/projects/markdown/syntax) +- Stack Overflow's [Markdown Editing Help](http://stackoverflow.com/editing-help) +- Fletcher T. Penney's [MultiMarkdown Syntax Guide](https://github.com/fletcher/MultiMarkdown/wiki/MultiMarkdown-Syntax-Guide) From 49ff58bd5bbd0287e6e1d5e85612cc6975fc7473 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 10:21:17 +0200 Subject: [PATCH 13/26] put test utilities in own group --- DTMarkdownParser.xcodeproj/project.pbxproj | 24 ++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index 1f37c08..01f969c 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -640,6 +640,21 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + A7A244CE1817BE5C00FDB3FC /* Utilities */ = { + isa = PBXGroup; + children = ( + A765C46118117EE5006B252A /* DTInvocationRecorder.h */, + A765C46218117EE5006B252A /* DTInvocationRecorder.m */, + A765C4671811906B006B252A /* DTInvocationTestFunctions.h */, + A765C4681811906B006B252A /* DTInvocationTestFunctions.m */, + A765C45D18116AF9006B252A /* NSInvocation+DTFoundation.h */, + A765C45E18116AF9006B252A /* NSInvocation+DTFoundation.m */, + A7D7DF2118155ED300F4377D /* NSString+DTMarkdown.h */, + A7D7DF2218155ED300F4377D /* NSString+DTMarkdown.m */, + ); + name = Utilities; + sourceTree = ""; + }; A7ABD2DB1811BEEB00494DA5 /* Resources */ = { isa = PBXGroup; children = ( @@ -985,16 +1000,9 @@ A7BF253418112C8B0013D8D7 /* Source */ = { isa = PBXGroup; children = ( + A7A244CE1817BE5C00FDB3FC /* Utilities */, A7BF253C181131A70013D8D7 /* DTMarkdownParserTest.m */, A7D7DF261815740000F4377D /* NSScannerDTMarkdownTest.m */, - A765C45D18116AF9006B252A /* NSInvocation+DTFoundation.h */, - A765C45E18116AF9006B252A /* NSInvocation+DTFoundation.m */, - A7D7DF2118155ED300F4377D /* NSString+DTMarkdown.h */, - A7D7DF2218155ED300F4377D /* NSString+DTMarkdown.m */, - A765C46118117EE5006B252A /* DTInvocationRecorder.h */, - A765C46218117EE5006B252A /* DTInvocationRecorder.m */, - A765C4671811906B006B252A /* DTInvocationTestFunctions.h */, - A765C4681811906B006B252A /* DTInvocationTestFunctions.m */, ); path = Source; sourceTree = ""; From df240d25e009d7249a20fbe6071f61f46ca686ea Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 13:17:49 +0200 Subject: [PATCH 14/26] implemented stacked list basics --- Core/Source/DTMarkdownParser.m | 133 +++++++++++++++++++++++++++-- Test/Source/DTMarkdownParserTest.m | 19 ++++- 2 files changed, 142 insertions(+), 10 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index 6507ba0..9a34046 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -21,6 +21,7 @@ NSString * const DTMarkdownParserSpecialFencedPreCode = @""; NSString * const DTMarkdownParserSpecialFencedPreEnd = @""; NSString * const DTMarkdownParserSpecialList = @""; +NSString * const DTMarkdownParserSpecialSubList = @""; @implementation DTMarkdownParser { @@ -44,6 +45,7 @@ @implementation DTMarkdownParser NSMutableDictionary *_specialLines; NSMutableIndexSet *_ignoredLines; NSMutableDictionary *_references; + NSMutableDictionary *_lineIndentLevel; } - (instancetype)initWithString:(NSString *)string options:(DTMarkdownParserOptions)options @@ -380,22 +382,101 @@ - (void)_processLine:(NSString *)line } } +- (NSUInteger)_indentationLevelForLine:(NSString *)line +{ + NSUInteger spacesCount = 0; + + for (NSUInteger idx=0; idx < [line length]; idx++) + { + unichar ch = [line characterAtIndex:idx]; + + if (ch == ' ') + { + spacesCount++; + } + else if (ch == '\t') + { + spacesCount+=3; + } + else + { + break; + } + } + + // found up to increments of 4 + return (NSUInteger)floorf((spacesCount/4.0)); +} + + - (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex { + NSString *prefix; + + NSString *specialTypeOfLine = _specialLines[@(lineIndex)]; + NSString *specialTypeOfFollowingLine = _specialLines[@(lineIndex+1)]; + + NSInteger previousLineIndent = lineIndex?[_lineIndentLevel[@(lineIndex-1)] integerValue]:0; + NSInteger currentLineIndent = [_lineIndentLevel[@(lineIndex)] integerValue]; + + if (specialTypeOfLine == DTMarkdownParserSpecialSubList) + { + // we know there is a list prefix, but we need to eliminate the indentation first + line = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + } + NSScanner *scanner = [NSScanner scannerWithString:line]; scanner.charactersToBeSkipped = nil; - NSString *prefix; - [scanner scanMarkdownLineListPrefix:&prefix]; + NSAssert(prefix, @"Cannot process line, no list prefix"); NSAssert(![[self _currentTag] isEqualToString:@"p"], @"There should never be an open P tag in %s", __PRETTY_FUNCTION__); // cut off prefix line = [line substringFromIndex:scanner.scanLocation]; - - if (![[self _currentTag] isEqualToString:@"ul"] && ![[self _currentTag] isEqualToString:@"ol"]) + + + BOOL needOpenNewListLevel = NO; + + if (specialTypeOfLine == DTMarkdownParserSpecialList) + { + if (![_tagStack containsObject:@"ul"] && ![_tagStack containsObject:@"ol"]) + { + // first line of list opens only if no list present + needOpenNewListLevel = YES; + } + } + else if (specialTypeOfLine == DTMarkdownParserSpecialSubList) + { + // sub list only opens one level + + if (currentLineIndent>previousLineIndent) + { + needOpenNewListLevel = YES; + } + else if (currentLineIndentcurrentLineIndent) + { + NSString *tagToPop = [self _currentTag]; + + [self _popTag]; + + if ([tagToPop isEqualToString:@"ul"] || [tagToPop isEqualToString:@"ol"]) + { + level--; + } + } + } + } + + + if (needOpenNewListLevel) { // need to open list if ([prefix hasSuffix:@"."]) @@ -410,16 +491,24 @@ - (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex } } + if ([[self _currentTag] isEqualToString:@"li"]) + { + [self _popTag]; // previous li + } + [self _pushTag:@"li" attributes:nil]; // process line as normal without prefix [self _processLine:line]; - [self _popTag]; // li - - if ([_ignoredLines containsIndex:lineIndex+1]) + if (specialTypeOfFollowingLine != DTMarkdownParserSpecialSubList) { - [self _popTag]; + [self _popTag]; // li + + if ([_ignoredLines containsIndex:lineIndex+1]) + { + [self _popTag]; + } } } @@ -428,19 +517,26 @@ - (void)_findAndMarkSpecialLines _ignoredLines = [NSMutableIndexSet new]; _specialLines = [NSMutableDictionary new]; _references = [NSMutableDictionary new]; + _lineIndentLevel = [NSMutableDictionary new]; NSScanner *scanner = [NSScanner scannerWithString:_string]; scanner.charactersToBeSkipped = nil; NSUInteger lineIndex = 0; + NSInteger previousLineIndent = 0; + while (![scanner isAtEnd]) { NSString *line; + if ([scanner scanUpToString:@"\n" intoString:&line]) { BOOL didFindSpecial = NO; NSString *specialOfLineBefore = nil; + NSInteger currentLineIndent = [self _indentationLevelForLine:line]; + _lineIndentLevel[@(lineIndex)] = @(currentLineIndent); + if (lineIndex) { specialOfLineBefore = _specialLines[@(lineIndex-1)]; @@ -566,7 +662,26 @@ - (void)_findAndMarkSpecialLines _specialLines[@(lineIndex)] = DTMarkdownParserSpecialList; didFindSpecial = YES; } + else if (specialOfLineBefore == DTMarkdownParserSpecialList || specialOfLineBefore == DTMarkdownParserSpecialSubList) + { + // line before ist list start + if ((currentLineIndent>=previousLineIndent+1 && currentLineIndent<=previousLineIndent+2) || (currentLineIndent>=previousLineIndent-1 && currentLineIndent<=previousLineIndent)) + { + NSString *indentedLine = [line stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + + NSScanner *indentedScanner = [NSScanner scannerWithString:indentedLine]; + indentedScanner.charactersToBeSkipped = nil; + + if ([indentedScanner scanMarkdownLineListPrefix:&listPrefix]) + { + _specialLines[@(lineIndex)] = DTMarkdownParserSpecialSubList; + didFindSpecial = YES; + } + } + } } + + previousLineIndent = currentLineIndent; } // look for empty lines @@ -658,7 +773,7 @@ - (BOOL)parse NSString *tag = nil; NSUInteger headerLevel = 0; - if (specialLine == DTMarkdownParserSpecialList) + if (specialLine == DTMarkdownParserSpecialList || specialLine == DTMarkdownParserSpecialSubList) { [self _processListLine:line lineIndex:currentLineIndex]; diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index 41b456a..f3934f5 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -956,7 +956,7 @@ - (void)testFencedCodeBlock STAssertEqualObjects(actual, expected, @"Expected result did not match"); } -#pragma mark - Lists +#pragma mark - Lists (1 Level) - (void)testSimpleList { @@ -1063,6 +1063,23 @@ - (void)testSimpleOrderedListWithMixedPrefixes STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +#pragma mark - Lists (Stacked) + +- (void)testStackedLists +{ + NSString *string = @"1. Lists in a list item:\n - Indented four spaces.\n * indented eight spaces.\n - Four spaces again."; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"
  1. Lists in a list item:
    • Indented four spaces.
      • indented eight spaces.
    • Four spaces again.
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + #pragma mark - Test Files - (void)testEmphasis From 5df9a66959ff8e183c9d1883e77fd757a91fe750 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 13:25:34 +0200 Subject: [PATCH 15/26] fixed case of closing multiple list levels --- Core/Source/DTMarkdownParser.m | 25 +++++++++++++------------ Test/Source/DTMarkdownParserTest.m | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index 9a34046..f249a62 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -456,21 +456,22 @@ - (void)_processListLine:(NSString *)line lineIndex:(NSUInteger)lineIndex { needOpenNewListLevel = YES; } - else if (currentLineIndentcurrentLineIndent) { - NSInteger level = previousLineIndent; + NSString *tagToPop = [self _currentTag]; + + [self _popTag]; - // close any number of list levels - while (level>currentLineIndent) + if ([tagToPop isEqualToString:@"ul"] || [tagToPop isEqualToString:@"ol"]) { - NSString *tagToPop = [self _currentTag]; - - [self _popTag]; - - if ([tagToPop isEqualToString:@"ul"] || [tagToPop isEqualToString:@"ol"]) - { - level--; - } + level--; } } } diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index f3934f5..1050c15 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -1080,6 +1080,21 @@ - (void)testStackedLists STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testStackedListsClosingTwoLevels +{ + NSString *string = @"1. Lists in a list item:\n - Indented four spaces.\n * indented eight spaces.\n- Top level again."; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"
  1. Lists in a list item:
    • Indented four spaces.
      • indented eight spaces.
  2. Top level again.
"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + #pragma mark - Test Files - (void)testEmphasis From deb913d92e27b53fa6a78f526c6bc37cf6facea3 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 13:56:06 +0200 Subject: [PATCH 16/26] fixed HR with underscores and between P --- Core/Source/DTMarkdownParser.m | 4 ++-- Test/Source/DTMarkdownParserTest.m | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index f249a62..5bc4c16 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -576,7 +576,7 @@ - (void)_findAndMarkSpecialLines if (!didFindSpecial) { - NSCharacterSet *ruleCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@" -*\n"]; + NSCharacterSet *ruleCharacterSet = [NSCharacterSet characterSetWithCharactersInString:@" -*_\n"]; if ([[line stringByTrimmingCharactersInSet:ruleCharacterSet] length]==0) { @@ -884,7 +884,7 @@ - (BOOL)parse tag = [NSString stringWithFormat:@"h%d", (int)headerLevel]; } - BOOL willCloseTag = (hasTwoNL || headerLevel || !shouldOutputLineText || followingLineIsIgnored || specialFollowingLine == DTMarkdownParserSpecialList); + BOOL willCloseTag = (hasTwoNL || headerLevel || !shouldOutputLineText || followingLineIsIgnored || specialFollowingLine == DTMarkdownParserSpecialList || specialFollowingLine == DTMarkdownParserSpecialTagHR); // handle new lines if (shouldOutputLineText && !hasTwoNL && ![scanner isAtEnd]) diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index 1050c15..893bebf 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -567,6 +567,8 @@ - (void)testGruberLineBreaks STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +#pragma mark - Horizontal Rule + - (void)testHorizontalRule { NSString *string = @"Line1\n\n * * *\n\n - - -\n\nLine2"; @@ -581,6 +583,20 @@ - (void)testHorizontalRule STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testHorizontalRuleAfterParagraphWithOnlyOneNL +{ + NSString *string = @"Line1\n___\nLine2"; + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

Line1

\n
\n

Line2

\n"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + #pragma mark - Links - (void)testInlineLink From 14746da3176e9c1fd10b080b189d8101d3f3836c Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:14:11 +0200 Subject: [PATCH 17/26] implemented angle bracket links --- Core/Source/DTMarkdownParser.m | 132 +++++++++++++++++------------ Test/Source/DTMarkdownParserTest.m | 15 ++++ 2 files changed, 93 insertions(+), 54 deletions(-) diff --git a/Core/Source/DTMarkdownParser.m b/Core/Source/DTMarkdownParser.m index 5bc4c16..3698b9c 100644 --- a/Core/Source/DTMarkdownParser.m +++ b/Core/Source/DTMarkdownParser.m @@ -142,6 +142,10 @@ - (NSString *)_effectiveMarkerPrefixOfString:(NSString *)string { return @"`"; } + else if ([string hasPrefix:@"<"]) + { + return @"<"; + } return nil; } @@ -205,7 +209,7 @@ - (void)_processLine:(NSString *)line NSScanner *scanner = [NSScanner scannerWithString:line]; scanner.charactersToBeSkipped = nil; - NSCharacterSet *markerChars = [NSCharacterSet characterSetWithCharactersInString:@"*_~[!`"]; + NSCharacterSet *markerChars = [NSCharacterSet characterSetWithCharactersInString:@"*_~[!`<"]; while (![scanner isAtEnd]) { @@ -230,80 +234,100 @@ - (void)_processLine:(NSString *)line NSAssert(effectiveOpeningMarker, @"There should be a closing marker to look for because we only get here from having scanned for marker characters"); - - if ([effectiveOpeningMarker isEqualToString:@"!["] || [effectiveOpeningMarker isEqualToString:@"["]) + if ([effectiveOpeningMarker isEqualToString:@"!["] || [effectiveOpeningMarker isEqualToString:@"["] || [effectiveOpeningMarker isEqualToString:@"<"]) { NSDictionary *attributes = nil; - if ([scanner scanUpToString:@"]" intoString:&enclosedPart]) + NSString *closingMarker; + BOOL isSimpleHREF; + + if ([effectiveOpeningMarker isEqualToString:@"<"]) + { + closingMarker = @">"; + isSimpleHREF = YES; + } + else + { + closingMarker = @"]"; + isSimpleHREF = NO; + } + + if ([scanner scanUpToString:closingMarker intoString:&enclosedPart]) { // scan closing part of link - if ([scanner scanString:@"]" intoString:NULL]) + if ([scanner scanString:closingMarker intoString:NULL]) { - // skip whitespace - [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL]; - - if ([scanner scanString:@"(" intoString:NULL]) + if (isSimpleHREF) { - // has potentially inline address - - NSString *hyperlink; + attributes = [NSDictionary dictionaryWithObject:enclosedPart forKey:@"href"]; + } + else + { + // skip whitespace + [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL]; - if ([scanner scanUpToString:@")" intoString:&hyperlink]) + if ([scanner scanString:@"(" intoString:NULL]) { - // see if it is closed too - if ([scanner scanString:@")" intoString:NULL]) + // has potentially inline address + + NSString *hyperlink; + + if ([scanner scanUpToString:@")" intoString:&hyperlink]) { - NSString *URLString; - NSString *title; - - NSScanner *urlScanner = [NSScanner scannerWithString:hyperlink]; - urlScanner.charactersToBeSkipped = nil; - - if ([urlScanner scanMarkdownHyperlink:&URLString title:&title]) + // see if it is closed too + if ([scanner scanString:@")" intoString:NULL]) { - NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; + NSString *URLString; + NSString *title; - if ([URLString length]) - { - tmpDict[@"href"] = URLString; - } + NSScanner *urlScanner = [NSScanner scannerWithString:hyperlink]; + urlScanner.charactersToBeSkipped = nil; - if ([title length]) + if ([urlScanner scanMarkdownHyperlink:&URLString title:&title]) { - tmpDict[@"title"] = title; - } - - if ([tmpDict count]) - { - attributes = [tmpDict copy]; + NSMutableDictionary *tmpDict = [NSMutableDictionary dictionary]; + + if ([URLString length]) + { + tmpDict[@"href"] = URLString; + } + + if ([title length]) + { + tmpDict[@"title"] = title; + } + + if ([tmpDict count]) + { + attributes = [tmpDict copy]; + } } } } } - } - else if ([scanner scanString:@"[" intoString:NULL]) - { - // has potentially address via ref - - NSString *reference; - - if ([scanner scanUpToString:@"]" intoString:&reference]) + else if ([scanner scanString:@"[" intoString:NULL]) { - // see if it is closed too - if ([scanner scanString:@"]" intoString:NULL]) + // has potentially address via ref + + NSString *reference; + + if ([scanner scanUpToString:@"]" intoString:&reference]) { - attributes = _references[[reference lowercaseString]]; + // see if it is closed too + if ([scanner scanString:@"]" intoString:NULL]) + { + attributes = _references[[reference lowercaseString]]; + } } - } - else - { - // could be [] - - if ([scanner scanString:@"]" intoString:NULL]) + else { - reference = [enclosedPart lowercaseString]; - attributes = _references[reference]; + // could be [] + + if ([scanner scanString:@"]" intoString:NULL]) + { + reference = [enclosedPart lowercaseString]; + attributes = _references[reference]; + } } } } @@ -313,7 +337,7 @@ - (void)_processLine:(NSString *)line // only output hyperlink if all is ok if (attributes) { - if ([effectiveOpeningMarker isEqualToString:@"["]) + if ([effectiveOpeningMarker isEqualToString:@"["] || isSimpleHREF) { [self _pushTag:@"a" attributes:attributes]; [self _reportCharacters:enclosedPart]; diff --git a/Test/Source/DTMarkdownParserTest.m b/Test/Source/DTMarkdownParserTest.m index 893bebf..a425c8a 100644 --- a/Test/Source/DTMarkdownParserTest.m +++ b/Test/Source/DTMarkdownParserTest.m @@ -818,6 +818,21 @@ - (void)testDoubleSquareLinkMissingClose STAssertEqualObjects(actual, expected, @"Expected result did not match"); } +- (void)testLinkWithAngleBrackets +{ + NSString *string = @"This is a link to \n"; + + DTMarkdownParser *parser = [self _parserForString:string options:0]; + + BOOL result = [parser parse]; + STAssertTrue(result, @"Parser should return YES"); + + NSString *expected = @"

This is a link to http://foo.com

\n"; + NSString *actual = [self _HTMLFromInvocations]; + + STAssertEqualObjects(actual, expected, @"Expected result did not match"); +} + #pragma mark - Images - (void)testInlineImage From a56d8c7b3d260a710676df76c62983030ca2eb7a Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:34:42 +0200 Subject: [PATCH 18/26] added iOS static lib target and unit test --- Core/DTMarkdownParser-Prefix.pch | 9 + DTMarkdownParser.xcodeproj/project.pbxproj | 828 ++++++++++++++++++++- Test/UnitTests-Prefix.pch | 10 +- 3 files changed, 834 insertions(+), 13 deletions(-) create mode 100644 Core/DTMarkdownParser-Prefix.pch diff --git a/Core/DTMarkdownParser-Prefix.pch b/Core/DTMarkdownParser-Prefix.pch new file mode 100644 index 0000000..37fdbe6 --- /dev/null +++ b/Core/DTMarkdownParser-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index 01f969c..3e0e45a 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -12,6 +12,283 @@ A765C45F18116AF9006B252A /* NSInvocation+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A765C45E18116AF9006B252A /* NSInvocation+DTFoundation.m */; }; A765C46318117EE5006B252A /* DTInvocationRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = A765C46218117EE5006B252A /* DTInvocationRecorder.m */; }; A765C4691811906B006B252A /* DTInvocationTestFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = A765C4681811906B006B252A /* DTInvocationTestFunctions.m */; }; + A7870C301817F6C000E39311 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7BF250B18112A3B0013D8D7 /* Foundation.framework */; }; + A7870C591817F70700E39311 /* DTMarkdownParser.m in Sources */ = {isa = PBXBuildFile; fileRef = A7BF25FF1811385A0013D8D7 /* DTMarkdownParser.m */; }; + A7870C5A1817F70700E39311 /* NSScanner+DTMarkdown.m in Sources */ = {isa = PBXBuildFile; fileRef = A78EAACB18151EF800650426 /* NSScanner+DTMarkdown.m */; }; + A7870C611817F7BB00E39311 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7BF251E18112A8F0013D8D7 /* SenTestingKit.framework */; }; + A7870C621817F7BB00E39311 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7BF250B18112A3B0013D8D7 /* Foundation.framework */; }; + A7870C631817F7BB00E39311 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7870C401817F6C000E39311 /* UIKit.framework */; }; + A7870C731817F7D800E39311 /* DTInvocationRecorder.m in Sources */ = {isa = PBXBuildFile; fileRef = A765C46218117EE5006B252A /* DTInvocationRecorder.m */; }; + A7870C741817F7D800E39311 /* DTInvocationTestFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = A765C4681811906B006B252A /* DTInvocationTestFunctions.m */; }; + A7870C751817F7D800E39311 /* NSInvocation+DTFoundation.m in Sources */ = {isa = PBXBuildFile; fileRef = A765C45E18116AF9006B252A /* NSInvocation+DTFoundation.m */; }; + A7870C761817F7D800E39311 /* NSString+DTMarkdown.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D7DF2218155ED300F4377D /* NSString+DTMarkdown.m */; }; + A7870C771817F7D800E39311 /* DTMarkdownParserTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A7BF253C181131A70013D8D7 /* DTMarkdownParserTest.m */; }; + A7870C781817F7D800E39311 /* NSScannerDTMarkdownTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D7DF261815740000F4377D /* NSScannerDTMarkdownTest.m */; }; + A7870C7C1817F89D00E39311 /* libDTMarkdownParser_iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A7870C2F1817F6C000E39311 /* libDTMarkdownParser_iOS.a */; }; + A7870C7D1817F8E500E39311 /* auto_link.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DC1811BEEB00494DA5 /* auto_link.html */; }; + A7870C7E1817F8E500E39311 /* auto_link.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DD1811BEEB00494DA5 /* auto_link.text */; }; + A7870C7F1817F8E500E39311 /* auto_link_email_with_underscore.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DE1811BEEB00494DA5 /* auto_link_email_with_underscore.html */; }; + A7870C801817F8E500E39311 /* auto_link_email_with_underscore.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DF1811BEEB00494DA5 /* auto_link_email_with_underscore.tags */; }; + A7870C811817F8E500E39311 /* auto_link_email_with_underscore.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E01811BEEB00494DA5 /* auto_link_email_with_underscore.text */; }; + A7870C821817F8E500E39311 /* auto_link_safe_mode.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E11811BEEB00494DA5 /* auto_link_safe_mode.html */; }; + A7870C831817F8E500E39311 /* auto_link_safe_mode.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E21811BEEB00494DA5 /* auto_link_safe_mode.opts */; }; + A7870C841817F8E500E39311 /* auto_link_safe_mode.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E31811BEEB00494DA5 /* auto_link_safe_mode.tags */; }; + A7870C851817F8E500E39311 /* auto_link_safe_mode.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E41811BEEB00494DA5 /* auto_link_safe_mode.text */; }; + A7870C861817F8E500E39311 /* basic_safe_mode.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E51811BEEB00494DA5 /* basic_safe_mode.html */; }; + A7870C871817F8E500E39311 /* basic_safe_mode.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E61811BEEB00494DA5 /* basic_safe_mode.opts */; }; + A7870C881817F8E500E39311 /* basic_safe_mode.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E71811BEEB00494DA5 /* basic_safe_mode.tags */; }; + A7870C891817F8E500E39311 /* basic_safe_mode.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E81811BEEB00494DA5 /* basic_safe_mode.text */; }; + A7870C8A1817F8E500E39311 /* basic_safe_mode_escape.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2E91811BEEB00494DA5 /* basic_safe_mode_escape.html */; }; + A7870C8B1817F8E500E39311 /* basic_safe_mode_escape.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2EA1811BEEB00494DA5 /* basic_safe_mode_escape.opts */; }; + A7870C8C1817F8E500E39311 /* basic_safe_mode_escape.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2EB1811BEEB00494DA5 /* basic_safe_mode_escape.tags */; }; + A7870C8D1817F8E500E39311 /* basic_safe_mode_escape.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2EC1811BEEB00494DA5 /* basic_safe_mode_escape.text */; }; + A7870C8E1817F8E500E39311 /* blockquote.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2ED1811BEEB00494DA5 /* blockquote.html */; }; + A7870C8F1817F8E500E39311 /* blockquote.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2EE1811BEEB00494DA5 /* blockquote.text */; }; + A7870C901817F8E500E39311 /* blockquote_with_pre.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2EF1811BEEB00494DA5 /* blockquote_with_pre.html */; }; + A7870C911817F8E500E39311 /* blockquote_with_pre.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F01811BEEB00494DA5 /* blockquote_with_pre.text */; }; + A7870C921817F8E500E39311 /* code_block_with_tabs.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F11811BEEB00494DA5 /* code_block_with_tabs.html */; }; + A7870C931817F8E500E39311 /* code_block_with_tabs.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F21811BEEB00494DA5 /* code_block_with_tabs.tags */; }; + A7870C941817F8E500E39311 /* code_block_with_tabs.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F31811BEEB00494DA5 /* code_block_with_tabs.text */; }; + A7870C951817F8E500E39311 /* code_blocks_leading_line.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F41811BEEB00494DA5 /* code_blocks_leading_line.html */; }; + A7870C961817F8E500E39311 /* code_blocks_leading_line.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F51811BEEB00494DA5 /* code_blocks_leading_line.text */; }; + A7870C971817F8E500E39311 /* code_safe_emphasis.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F61811BEEB00494DA5 /* code_safe_emphasis.html */; }; + A7870C981817F8E500E39311 /* code_safe_emphasis.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F71811BEEB00494DA5 /* code_safe_emphasis.opts */; }; + A7870C991817F8E500E39311 /* code_safe_emphasis.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F81811BEEB00494DA5 /* code_safe_emphasis.tags */; }; + A7870C9A1817F8E500E39311 /* code_safe_emphasis.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2F91811BEEB00494DA5 /* code_safe_emphasis.text */; }; + A7870C9B1817F8E500E39311 /* codeblock.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2FA1811BEEB00494DA5 /* codeblock.html */; }; + A7870C9C1817F8E500E39311 /* codeblock.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2FB1811BEEB00494DA5 /* codeblock.text */; }; + A7870C9D1817F8E500E39311 /* codespans.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2FC1811BEEB00494DA5 /* codespans.html */; }; + A7870C9E1817F8E500E39311 /* codespans.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2FD1811BEEB00494DA5 /* codespans.text */; }; + A7870C9F1817F8E500E39311 /* codespans_safe_mode.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2FE1811BEEB00494DA5 /* codespans_safe_mode.html */; }; + A7870CA01817F8E500E39311 /* codespans_safe_mode.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2FF1811BEEB00494DA5 /* codespans_safe_mode.opts */; }; + A7870CA11817F8E500E39311 /* codespans_safe_mode.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3001811BEEB00494DA5 /* codespans_safe_mode.tags */; }; + A7870CA21817F8E500E39311 /* codespans_safe_mode.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3011811BEEB00494DA5 /* codespans_safe_mode.text */; }; + A7870CA31817F8E500E39311 /* cuddled_list_indented.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3021811BEEB00494DA5 /* cuddled_list_indented.html */; }; + A7870CA41817F8E500E39311 /* cuddled_list_indented.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3031811BEEB00494DA5 /* cuddled_list_indented.opts */; }; + A7870CA51817F8E500E39311 /* cuddled_list_indented.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3041811BEEB00494DA5 /* cuddled_list_indented.tags */; }; + A7870CA61817F8E500E39311 /* cuddled_list_indented.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3051811BEEB00494DA5 /* cuddled_list_indented.text */; }; + A7870CA71817F8E500E39311 /* cuddled_para_and_list.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3061811BEEB00494DA5 /* cuddled_para_and_list.html */; }; + A7870CA81817F8E500E39311 /* cuddled_para_and_list.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3071811BEEB00494DA5 /* cuddled_para_and_list.opts */; }; + A7870CA91817F8E500E39311 /* cuddled_para_and_list.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3081811BEEB00494DA5 /* cuddled_para_and_list.tags */; }; + A7870CAA1817F8E500E39311 /* cuddled_para_and_list.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3091811BEEB00494DA5 /* cuddled_para_and_list.text */; }; + A7870CAB1817F8E500E39311 /* cuddled_with_para.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD30A1811BEEB00494DA5 /* cuddled_with_para.html */; }; + A7870CAC1817F8E500E39311 /* cuddled_with_para.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD30B1811BEEB00494DA5 /* cuddled_with_para.text */; }; + A7870CAD1817F8E500E39311 /* demote_headers.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD30C1811BEEB00494DA5 /* demote_headers.html */; }; + A7870CAE1817F8E500E39311 /* demote_headers.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD30D1811BEEB00494DA5 /* demote_headers.opts */; }; + A7870CAF1817F8E500E39311 /* demote_headers.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD30E1811BEEB00494DA5 /* demote_headers.text */; }; + A7870CB01817F8E500E39311 /* emacs_head_vars.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD30F1811BEEB00494DA5 /* emacs_head_vars.html */; }; + A7870CB11817F8E500E39311 /* emacs_head_vars.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3101811BEEB00494DA5 /* emacs_head_vars.opts */; }; + A7870CB21817F8E500E39311 /* emacs_head_vars.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3111811BEEB00494DA5 /* emacs_head_vars.tags */; }; + A7870CB31817F8E500E39311 /* emacs_head_vars.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3121811BEEB00494DA5 /* emacs_head_vars.text */; }; + A7870CB41817F8E500E39311 /* emacs_tail_vars.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3131811BEEB00494DA5 /* emacs_tail_vars.html */; }; + A7870CB51817F8E500E39311 /* emacs_tail_vars.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3141811BEEB00494DA5 /* emacs_tail_vars.opts */; }; + A7870CB61817F8E500E39311 /* emacs_tail_vars.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3151811BEEB00494DA5 /* emacs_tail_vars.tags */; }; + A7870CB71817F8E500E39311 /* emacs_tail_vars.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3161811BEEB00494DA5 /* emacs_tail_vars.text */; }; + A7870CB81817F8E500E39311 /* emphasis.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3171811BEEB00494DA5 /* emphasis.html */; }; + A7870CB91817F8E500E39311 /* emphasis.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3181811BEEB00494DA5 /* emphasis.text */; }; + A7870CBA1817F8E500E39311 /* escapes.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3191811BEEB00494DA5 /* escapes.html */; }; + A7870CBB1817F8E500E39311 /* escapes.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD31A1811BEEB00494DA5 /* escapes.tags */; }; + A7870CBC1817F8E500E39311 /* escapes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD31B1811BEEB00494DA5 /* escapes.text */; }; + A7870CBD1817F8E500E39311 /* fenced_code_blocks_issue86.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD31C1811BEEB00494DA5 /* fenced_code_blocks_issue86.html */; }; + A7870CBE1817F8E500E39311 /* fenced_code_blocks_issue86.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD31D1811BEEB00494DA5 /* fenced_code_blocks_issue86.opts */; }; + A7870CBF1817F8E500E39311 /* fenced_code_blocks_issue86.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD31E1811BEEB00494DA5 /* fenced_code_blocks_issue86.tags */; }; + A7870CC01817F8E500E39311 /* fenced_code_blocks_issue86.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD31F1811BEEB00494DA5 /* fenced_code_blocks_issue86.text */; }; + A7870CC11817F8E500E39311 /* fenced_code_blocks_leading_line.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3201811BEEB00494DA5 /* fenced_code_blocks_leading_line.html */; }; + A7870CC21817F8E500E39311 /* fenced_code_blocks_leading_line.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3211811BEEB00494DA5 /* fenced_code_blocks_leading_line.opts */; }; + A7870CC31817F8E500E39311 /* fenced_code_blocks_leading_line.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3221811BEEB00494DA5 /* fenced_code_blocks_leading_line.tags */; }; + A7870CC41817F8E500E39311 /* fenced_code_blocks_leading_line.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3231811BEEB00494DA5 /* fenced_code_blocks_leading_line.text */; }; + A7870CC51817F8E500E39311 /* fenced_code_blocks_simple.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3241811BEEB00494DA5 /* fenced_code_blocks_simple.html */; }; + A7870CC61817F8E500E39311 /* fenced_code_blocks_simple.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3251811BEEB00494DA5 /* fenced_code_blocks_simple.opts */; }; + A7870CC71817F8E500E39311 /* fenced_code_blocks_simple.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3261811BEEB00494DA5 /* fenced_code_blocks_simple.tags */; }; + A7870CC81817F8E500E39311 /* fenced_code_blocks_simple.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3271811BEEB00494DA5 /* fenced_code_blocks_simple.text */; }; + A7870CC91817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3281811BEEB00494DA5 /* fenced_code_blocks_syntax_highlighting.html */; }; + A7870CCA1817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3291811BEEB00494DA5 /* fenced_code_blocks_syntax_highlighting.opts */; }; + A7870CCB1817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD32A1811BEEB00494DA5 /* fenced_code_blocks_syntax_highlighting.tags */; }; + A7870CCC1817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD32B1811BEEB00494DA5 /* fenced_code_blocks_syntax_highlighting.text */; }; + A7870CCD1817F8E500E39311 /* footnotes.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD32C1811BEEB00494DA5 /* footnotes.html */; }; + A7870CCE1817F8E500E39311 /* footnotes.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD32D1811BEEB00494DA5 /* footnotes.opts */; }; + A7870CCF1817F8E500E39311 /* footnotes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD32E1811BEEB00494DA5 /* footnotes.text */; }; + A7870CD01817F8E500E39311 /* footnotes_letters.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD32F1811BEEB00494DA5 /* footnotes_letters.html */; }; + A7870CD11817F8E500E39311 /* footnotes_letters.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3301811BEEB00494DA5 /* footnotes_letters.opts */; }; + A7870CD21817F8E500E39311 /* footnotes_letters.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3311811BEEB00494DA5 /* footnotes_letters.tags */; }; + A7870CD31817F8E500E39311 /* footnotes_letters.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3321811BEEB00494DA5 /* footnotes_letters.text */; }; + A7870CD41817F8E500E39311 /* footnotes_markup.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3331811BEEB00494DA5 /* footnotes_markup.html */; }; + A7870CD51817F8E500E39311 /* footnotes_markup.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3341811BEEB00494DA5 /* footnotes_markup.opts */; }; + A7870CD61817F8E500E39311 /* footnotes_markup.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3351811BEEB00494DA5 /* footnotes_markup.tags */; }; + A7870CD71817F8E500E39311 /* footnotes_markup.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3361811BEEB00494DA5 /* footnotes_markup.text */; }; + A7870CD81817F8E500E39311 /* footnotes_safe_mode_escape.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3371811BEEB00494DA5 /* footnotes_safe_mode_escape.html */; }; + A7870CD91817F8E500E39311 /* footnotes_safe_mode_escape.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3381811BEEB00494DA5 /* footnotes_safe_mode_escape.opts */; }; + A7870CDA1817F8E500E39311 /* footnotes_safe_mode_escape.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3391811BEEB00494DA5 /* footnotes_safe_mode_escape.tags */; }; + A7870CDB1817F8E500E39311 /* footnotes_safe_mode_escape.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD33A1811BEEB00494DA5 /* footnotes_safe_mode_escape.text */; }; + A7870CDC1817F8E500E39311 /* footnotes_underscores.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD33B1811BEEB00494DA5 /* footnotes_underscores.html */; }; + A7870CDD1817F8E500E39311 /* footnotes_underscores.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD33C1811BEEB00494DA5 /* footnotes_underscores.opts */; }; + A7870CDE1817F8E500E39311 /* footnotes_underscores.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD33D1811BEEB00494DA5 /* footnotes_underscores.tags */; }; + A7870CDF1817F8E500E39311 /* footnotes_underscores.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD33E1811BEEB00494DA5 /* footnotes_underscores.text */; }; + A7870CE01817F8E500E39311 /* header.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD33F1811BEEB00494DA5 /* header.html */; }; + A7870CE11817F8E500E39311 /* header.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3401811BEEB00494DA5 /* header.text */; }; + A7870CE21817F8E500E39311 /* header_ids_1.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3411811BEEB00494DA5 /* header_ids_1.html */; }; + A7870CE31817F8E500E39311 /* header_ids_1.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3421811BEEB00494DA5 /* header_ids_1.opts */; }; + A7870CE41817F8E500E39311 /* header_ids_1.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3431811BEEB00494DA5 /* header_ids_1.tags */; }; + A7870CE51817F8E500E39311 /* header_ids_1.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3441811BEEB00494DA5 /* header_ids_1.text */; }; + A7870CE61817F8E500E39311 /* header_ids_2.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3451811BEEB00494DA5 /* header_ids_2.html */; }; + A7870CE71817F8E500E39311 /* header_ids_2.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3461811BEEB00494DA5 /* header_ids_2.opts */; }; + A7870CE81817F8E500E39311 /* header_ids_2.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3471811BEEB00494DA5 /* header_ids_2.tags */; }; + A7870CE91817F8E500E39311 /* header_ids_2.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3481811BEEB00494DA5 /* header_ids_2.text */; }; + A7870CEA1817F8E500E39311 /* header_ids_3.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3491811BEEB00494DA5 /* header_ids_3.html */; }; + A7870CEB1817F8E500E39311 /* header_ids_3.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD34A1811BEEB00494DA5 /* header_ids_3.opts */; }; + A7870CEC1817F8E500E39311 /* header_ids_3.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD34B1811BEEB00494DA5 /* header_ids_3.tags */; }; + A7870CED1817F8E500E39311 /* header_ids_3.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD34C1811BEEB00494DA5 /* header_ids_3.text */; }; + A7870CEE1817F8E500E39311 /* header_ids_4.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD34D1811BEEB00494DA5 /* header_ids_4.html */; }; + A7870CEF1817F8E500E39311 /* header_ids_4.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD34E1811BEEB00494DA5 /* header_ids_4.opts */; }; + A7870CF01817F8E500E39311 /* header_ids_4.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD34F1811BEEB00494DA5 /* header_ids_4.tags */; }; + A7870CF11817F8E500E39311 /* header_ids_4.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3501811BEEB00494DA5 /* header_ids_4.text */; }; + A7870CF21817F8E500E39311 /* header_ids_5.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3511811BEEB00494DA5 /* header_ids_5.html */; }; + A7870CF31817F8E500E39311 /* header_ids_5.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3521811BEEB00494DA5 /* header_ids_5.opts */; }; + A7870CF41817F8E500E39311 /* header_ids_5.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3531811BEEB00494DA5 /* header_ids_5.tags */; }; + A7870CF51817F8E500E39311 /* header_ids_5.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3541811BEEB00494DA5 /* header_ids_5.text */; }; + A7870CF61817F8E500E39311 /* hr.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3551811BEEB00494DA5 /* hr.html */; }; + A7870CF71817F8E500E39311 /* hr.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3561811BEEB00494DA5 /* hr.text */; }; + A7870CF81817F8E500E39311 /* hr_spaces.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3571811BEEB00494DA5 /* hr_spaces.html */; }; + A7870CF91817F8E500E39311 /* hr_spaces.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3581811BEEB00494DA5 /* hr_spaces.text */; }; + A7870CFA1817F8E500E39311 /* html5_block_tags.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3591811BEEB00494DA5 /* html5_block_tags.html */; }; + A7870CFB1817F8E500E39311 /* html5_block_tags.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD35A1811BEEB00494DA5 /* html5_block_tags.tags */; }; + A7870CFC1817F8E500E39311 /* html5_block_tags.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD35B1811BEEB00494DA5 /* html5_block_tags.text */; }; + A7870CFD1817F8E500E39311 /* html_classes.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD35C1811BEEB00494DA5 /* html_classes.html */; }; + A7870CFE1817F8E500E39311 /* html_classes.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD35D1811BEEB00494DA5 /* html_classes.opts */; }; + A7870CFF1817F8E500E39311 /* html_classes.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD35E1811BEEB00494DA5 /* html_classes.tags */; }; + A7870D001817F8E500E39311 /* html_classes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD35F1811BEEB00494DA5 /* html_classes.text */; }; + A7870D011817F8E500E39311 /* img_in_link.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3601811BEEB00494DA5 /* img_in_link.html */; }; + A7870D021817F8E500E39311 /* img_in_link.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3611811BEEB00494DA5 /* img_in_link.text */; }; + A7870D031817F8E500E39311 /* inline_links.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3621811BEEB00494DA5 /* inline_links.html */; }; + A7870D041817F8E500E39311 /* inline_links.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3631811BEEB00494DA5 /* inline_links.text */; }; + A7870D051817F8E500E39311 /* issue21_gt_escaping.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3641811BEEB00494DA5 /* issue21_gt_escaping.html */; }; + A7870D061817F8E500E39311 /* issue21_gt_escaping.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3651811BEEB00494DA5 /* issue21_gt_escaping.opts */; }; + A7870D071817F8E500E39311 /* issue21_gt_escaping.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3661811BEEB00494DA5 /* issue21_gt_escaping.tags */; }; + A7870D081817F8E500E39311 /* issue21_gt_escaping.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3671811BEEB00494DA5 /* issue21_gt_escaping.text */; }; + A7870D091817F8E500E39311 /* issue2_safe_mode_borks_markup.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3681811BEEB00494DA5 /* issue2_safe_mode_borks_markup.html */; }; + A7870D0A1817F8E500E39311 /* issue2_safe_mode_borks_markup.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3691811BEEB00494DA5 /* issue2_safe_mode_borks_markup.opts */; }; + A7870D0B1817F8E500E39311 /* issue2_safe_mode_borks_markup.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD36A1811BEEB00494DA5 /* issue2_safe_mode_borks_markup.tags */; }; + A7870D0C1817F8E500E39311 /* issue2_safe_mode_borks_markup.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD36B1811BEEB00494DA5 /* issue2_safe_mode_borks_markup.text */; }; + A7870D0D1817F8E500E39311 /* issue3_bad_code_color_hack.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD36C1811BEEB00494DA5 /* issue3_bad_code_color_hack.html */; }; + A7870D0E1817F8E500E39311 /* issue3_bad_code_color_hack.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD36D1811BEEB00494DA5 /* issue3_bad_code_color_hack.opts */; }; + A7870D0F1817F8E500E39311 /* issue3_bad_code_color_hack.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD36E1811BEEB00494DA5 /* issue3_bad_code_color_hack.tags */; }; + A7870D101817F8E500E39311 /* issue3_bad_code_color_hack.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD36F1811BEEB00494DA5 /* issue3_bad_code_color_hack.text */; }; + A7870D111817F8E500E39311 /* issue52_hang.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3701811BEEB00494DA5 /* issue52_hang.html */; }; + A7870D121817F8E500E39311 /* issue52_hang.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3711811BEEB00494DA5 /* issue52_hang.tags */; }; + A7870D131817F8E500E39311 /* issue52_hang.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3721811BEEB00494DA5 /* issue52_hang.text */; }; + A7870D141817F8E500E39311 /* issue54_escape_link_title.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3731811BEEB00494DA5 /* issue54_escape_link_title.html */; }; + A7870D151817F8E500E39311 /* issue54_escape_link_title.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3741811BEEB00494DA5 /* issue54_escape_link_title.tags */; }; + A7870D161817F8E500E39311 /* issue54_escape_link_title.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3751811BEEB00494DA5 /* issue54_escape_link_title.text */; }; + A7870D171817F8E500E39311 /* link_defn_alt_title_delims.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3761811BEEB00494DA5 /* link_defn_alt_title_delims.html */; }; + A7870D181817F8E500E39311 /* link_defn_alt_title_delims.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3771811BEEB00494DA5 /* link_defn_alt_title_delims.text */; }; + A7870D191817F8E500E39311 /* link_defn_spaces_in_url.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3781811BEEB00494DA5 /* link_defn_spaces_in_url.html */; }; + A7870D1A1817F8E500E39311 /* link_defn_spaces_in_url.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3791811BEEB00494DA5 /* link_defn_spaces_in_url.tags */; }; + A7870D1B1817F8E500E39311 /* link_defn_spaces_in_url.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD37A1811BEEB00494DA5 /* link_defn_spaces_in_url.text */; }; + A7870D1C1817F8E500E39311 /* link_nofollow.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD37B1811BEEB00494DA5 /* link_nofollow.html */; }; + A7870D1D1817F8E500E39311 /* link_nofollow.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD37C1811BEEB00494DA5 /* link_nofollow.opts */; }; + A7870D1E1817F8E500E39311 /* link_nofollow.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD37D1811BEEB00494DA5 /* link_nofollow.tags */; }; + A7870D1F1817F8E500E39311 /* link_nofollow.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD37E1811BEEB00494DA5 /* link_nofollow.text */; }; + A7870D201817F8E500E39311 /* link_patterns.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD37F1811BEEB00494DA5 /* link_patterns.html */; }; + A7870D211817F8E500E39311 /* link_patterns.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3801811BEEB00494DA5 /* link_patterns.opts */; }; + A7870D221817F8E500E39311 /* link_patterns.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3811811BEEB00494DA5 /* link_patterns.text */; }; + A7870D231817F8E500E39311 /* link_patterns_double_hit.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3821811BEEB00494DA5 /* link_patterns_double_hit.html */; }; + A7870D241817F8E500E39311 /* link_patterns_double_hit.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3831811BEEB00494DA5 /* link_patterns_double_hit.opts */; }; + A7870D251817F8E500E39311 /* link_patterns_double_hit.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3841811BEEB00494DA5 /* link_patterns_double_hit.tags */; }; + A7870D261817F8E500E39311 /* link_patterns_double_hit.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3851811BEEB00494DA5 /* link_patterns_double_hit.text */; }; + A7870D271817F8E500E39311 /* link_patterns_edge_cases.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3861811BEEB00494DA5 /* link_patterns_edge_cases.html */; }; + A7870D281817F8E500E39311 /* link_patterns_edge_cases.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3871811BEEB00494DA5 /* link_patterns_edge_cases.opts */; }; + A7870D291817F8E500E39311 /* link_patterns_edge_cases.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3881811BEEB00494DA5 /* link_patterns_edge_cases.tags */; }; + A7870D2A1817F8E500E39311 /* link_patterns_edge_cases.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3891811BEEB00494DA5 /* link_patterns_edge_cases.text */; }; + A7870D2B1817F8E500E39311 /* lists.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD38A1811BEEB00494DA5 /* lists.html */; }; + A7870D2C1817F8E500E39311 /* lists.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD38B1811BEEB00494DA5 /* lists.text */; }; + A7870D2D1817F8E500E39311 /* lists2.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD38C1811BEEB00494DA5 /* lists2.html */; }; + A7870D2E1817F8E500E39311 /* lists2.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD38D1811BEEB00494DA5 /* lists2.tags */; }; + A7870D2F1817F8E500E39311 /* lists2.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD38E1811BEEB00494DA5 /* lists2.text */; }; + A7870D301817F8E500E39311 /* long_link.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD38F1811BEEB00494DA5 /* long_link.html */; }; + A7870D311817F8E500E39311 /* long_link.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3901811BEEB00494DA5 /* long_link.tags */; }; + A7870D321817F8E500E39311 /* long_link.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3911811BEEB00494DA5 /* long_link.text */; }; + A7870D331817F8E500E39311 /* markdown_in_html.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3921811BEEB00494DA5 /* markdown_in_html.html */; }; + A7870D341817F8E500E39311 /* markdown_in_html.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3931811BEEB00494DA5 /* markdown_in_html.opts */; }; + A7870D351817F8E500E39311 /* markdown_in_html.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3941811BEEB00494DA5 /* markdown_in_html.tags */; }; + A7870D361817F8E500E39311 /* markdown_in_html.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3951811BEEB00494DA5 /* markdown_in_html.text */; }; + A7870D371817F8E500E39311 /* markdown_in_html.toc_html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3961811BEEB00494DA5 /* markdown_in_html.toc_html */; }; + A7870D381817F8E500E39311 /* metadata.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3971811BEEB00494DA5 /* metadata.html */; }; + A7870D391817F8E500E39311 /* metadata.metadata in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3981811BEEB00494DA5 /* metadata.metadata */; }; + A7870D3A1817F8E500E39311 /* metadata.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3991811BEEB00494DA5 /* metadata.opts */; }; + A7870D3B1817F8E500E39311 /* metadata.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD39A1811BEEB00494DA5 /* metadata.tags */; }; + A7870D3C1817F8E500E39311 /* metadata.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD39B1811BEEB00494DA5 /* metadata.text */; }; + A7870D3D1817F8E500E39311 /* mismatched_footnotes.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD39C1811BEEB00494DA5 /* mismatched_footnotes.html */; }; + A7870D3E1817F8E500E39311 /* mismatched_footnotes.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD39D1811BEEB00494DA5 /* mismatched_footnotes.opts */; }; + A7870D3F1817F8E500E39311 /* mismatched_footnotes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD39E1811BEEB00494DA5 /* mismatched_footnotes.text */; }; + A7870D401817F8E500E39311 /* missing_link_defn.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD39F1811BEEB00494DA5 /* missing_link_defn.html */; }; + A7870D411817F8E500E39311 /* missing_link_defn.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A01811BEEB00494DA5 /* missing_link_defn.text */; }; + A7870D421817F8E500E39311 /* nested_list.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A11811BEEB00494DA5 /* nested_list.html */; }; + A7870D431817F8E500E39311 /* nested_list.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A21811BEEB00494DA5 /* nested_list.text */; }; + A7870D441817F8E500E39311 /* nested_list_safe_mode.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A31811BEEB00494DA5 /* nested_list_safe_mode.html */; }; + A7870D451817F8E500E39311 /* nested_list_safe_mode.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A41811BEEB00494DA5 /* nested_list_safe_mode.opts */; }; + A7870D461817F8E500E39311 /* nested_list_safe_mode.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A51811BEEB00494DA5 /* nested_list_safe_mode.tags */; }; + A7870D471817F8E500E39311 /* nested_list_safe_mode.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A61811BEEB00494DA5 /* nested_list_safe_mode.text */; }; + A7870D481817F8E500E39311 /* not_quite_a_list.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A71811BEEB00494DA5 /* not_quite_a_list.html */; }; + A7870D491817F8E500E39311 /* not_quite_a_list.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A81811BEEB00494DA5 /* not_quite_a_list.text */; }; + A7870D4A1817F8E500E39311 /* parens_in_url_4.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3A91811BEEB00494DA5 /* parens_in_url_4.html */; }; + A7870D4B1817F8E500E39311 /* parens_in_url_4.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3AA1811BEEB00494DA5 /* parens_in_url_4.tags */; }; + A7870D4C1817F8E500E39311 /* parens_in_url_4.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3AB1811BEEB00494DA5 /* parens_in_url_4.text */; }; + A7870D4D1817F8E500E39311 /* pi_and_xinclude.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3AC1811BEEB00494DA5 /* pi_and_xinclude.html */; }; + A7870D4E1817F8E500E39311 /* pi_and_xinclude.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3AD1811BEEB00494DA5 /* pi_and_xinclude.opts */; }; + A7870D4F1817F8E500E39311 /* pi_and_xinclude.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3AE1811BEEB00494DA5 /* pi_and_xinclude.tags */; }; + A7870D501817F8E500E39311 /* pi_and_xinclude.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3AF1811BEEB00494DA5 /* pi_and_xinclude.text */; }; + A7870D511817F8E500E39311 /* pyshell.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B01811BEEB00494DA5 /* pyshell.html */; }; + A7870D521817F8E500E39311 /* pyshell.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B11811BEEB00494DA5 /* pyshell.opts */; }; + A7870D531817F8E500E39311 /* pyshell.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B21811BEEB00494DA5 /* pyshell.text */; }; + A7870D541817F8E500E39311 /* raw_html.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B31811BEEB00494DA5 /* raw_html.html */; }; + A7870D551817F8E500E39311 /* raw_html.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B41811BEEB00494DA5 /* raw_html.text */; }; + A7870D561817F8E500E39311 /* ref_links.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B51811BEEB00494DA5 /* ref_links.html */; }; + A7870D571817F8E500E39311 /* ref_links.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B61811BEEB00494DA5 /* ref_links.text */; }; + A7870D581817F8E500E39311 /* smarty_pants.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B71811BEEB00494DA5 /* smarty_pants.html */; }; + A7870D591817F8E500E39311 /* smarty_pants.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B81811BEEB00494DA5 /* smarty_pants.opts */; }; + A7870D5A1817F8E500E39311 /* smarty_pants.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3B91811BEEB00494DA5 /* smarty_pants.tags */; }; + A7870D5B1817F8E500E39311 /* smarty_pants.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3BA1811BEEB00494DA5 /* smarty_pants.text */; }; + A7870D5C1817F8E500E39311 /* smarty_pants_image_links.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3BB1811BEEB00494DA5 /* smarty_pants_image_links.html */; }; + A7870D5D1817F8E500E39311 /* smarty_pants_image_links.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3BC1811BEEB00494DA5 /* smarty_pants_image_links.opts */; }; + A7870D5E1817F8E500E39311 /* smarty_pants_image_links.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3BD1811BEEB00494DA5 /* smarty_pants_image_links.tags */; }; + A7870D5F1817F8E500E39311 /* smarty_pants_image_links.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3BE1811BEEB00494DA5 /* smarty_pants_image_links.text */; }; + A7870D601817F8E500E39311 /* sublist-ordered-para.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3BF1811BEEB00494DA5 /* sublist-ordered-para.html */; }; + A7870D611817F8E500E39311 /* sublist-ordered-para.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C01811BEEB00494DA5 /* sublist-ordered-para.tags */; }; + A7870D621817F8E500E39311 /* sublist-ordered-para.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C11811BEEB00494DA5 /* sublist-ordered-para.text */; }; + A7870D631817F8E500E39311 /* sublist-para.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C21811BEEB00494DA5 /* sublist-para.html */; }; + A7870D641817F8E500E39311 /* sublist-para.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C31811BEEB00494DA5 /* sublist-para.tags */; }; + A7870D651817F8E500E39311 /* sublist-para.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C41811BEEB00494DA5 /* sublist-para.text */; }; + A7870D661817F8E500E39311 /* syntax_color.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C51811BEEB00494DA5 /* syntax_color.html */; }; + A7870D671817F8E500E39311 /* syntax_color.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C61811BEEB00494DA5 /* syntax_color.opts */; }; + A7870D681817F8E500E39311 /* syntax_color.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C71811BEEB00494DA5 /* syntax_color.tags */; }; + A7870D691817F8E500E39311 /* syntax_color.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C81811BEEB00494DA5 /* syntax_color.text */; }; + A7870D6A1817F8E500E39311 /* syntax_color_opts.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3C91811BEEB00494DA5 /* syntax_color_opts.html */; }; + A7870D6B1817F8E500E39311 /* syntax_color_opts.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3CA1811BEEB00494DA5 /* syntax_color_opts.opts */; }; + A7870D6C1817F8E500E39311 /* syntax_color_opts.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3CB1811BEEB00494DA5 /* syntax_color_opts.tags */; }; + A7870D6D1817F8E500E39311 /* syntax_color_opts.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3CC1811BEEB00494DA5 /* syntax_color_opts.text */; }; + A7870D6E1817F8E500E39311 /* toc_1.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3CD1811BEEB00494DA5 /* toc_1.html */; }; + A7870D6F1817F8E500E39311 /* toc_1.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3CE1811BEEB00494DA5 /* toc_1.opts */; }; + A7870D701817F8E500E39311 /* toc_1.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3CF1811BEEB00494DA5 /* toc_1.tags */; }; + A7870D711817F8E500E39311 /* toc_1.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D01811BEEB00494DA5 /* toc_1.text */; }; + A7870D721817F8E500E39311 /* toc_1.toc_html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D11811BEEB00494DA5 /* toc_1.toc_html */; }; + A7870D731817F8E500E39311 /* toc_2.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D21811BEEB00494DA5 /* toc_2.html */; }; + A7870D741817F8E500E39311 /* toc_2.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D31811BEEB00494DA5 /* toc_2.opts */; }; + A7870D751817F8E500E39311 /* toc_2.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D41811BEEB00494DA5 /* toc_2.tags */; }; + A7870D761817F8E500E39311 /* toc_2.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D51811BEEB00494DA5 /* toc_2.text */; }; + A7870D771817F8E500E39311 /* toc_2.toc_html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D61811BEEB00494DA5 /* toc_2.toc_html */; }; + A7870D781817F8E500E39311 /* tricky_anchors.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D71811BEEB00494DA5 /* tricky_anchors.html */; }; + A7870D791817F8E500E39311 /* tricky_anchors.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D81811BEEB00494DA5 /* tricky_anchors.text */; }; + A7870D7A1817F8E500E39311 /* two_comments.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3D91811BEEB00494DA5 /* two_comments.html */; }; + A7870D7B1817F8E500E39311 /* two_comments.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3DA1811BEEB00494DA5 /* two_comments.text */; }; + A7870D7C1817F8E500E39311 /* underline_in_autolink.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3DB1811BEEB00494DA5 /* underline_in_autolink.html */; }; + A7870D7D1817F8E500E39311 /* underline_in_autolink.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3DC1811BEEB00494DA5 /* underline_in_autolink.text */; }; + A7870D7E1817F8E500E39311 /* wiki_tables.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3DD1811BEEB00494DA5 /* wiki_tables.html */; }; + A7870D7F1817F8E500E39311 /* wiki_tables.opts in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3DE1811BEEB00494DA5 /* wiki_tables.opts */; }; + A7870D801817F8E500E39311 /* wiki_tables.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3DF1811BEEB00494DA5 /* wiki_tables.tags */; }; + A7870D811817F8E500E39311 /* wiki_tables.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E01811BEEB00494DA5 /* wiki_tables.text */; }; + A7870D821817F8E500E39311 /* xss_quotes.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E11811BEEB00494DA5 /* xss_quotes.html */; }; + A7870D831817F8E500E39311 /* xss_quotes.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E21811BEEB00494DA5 /* xss_quotes.tags */; }; + A7870D841817F8E500E39311 /* xss_quotes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E31811BEEB00494DA5 /* xss_quotes.text */; }; A78EAACC18151EF800650426 /* NSScanner+DTMarkdown.h in Headers */ = {isa = PBXBuildFile; fileRef = A78EAACA18151EF800650426 /* NSScanner+DTMarkdown.h */; }; A78EAACD18151EF800650426 /* NSScanner+DTMarkdown.m in Sources */ = {isa = PBXBuildFile; fileRef = A78EAACB18151EF800650426 /* NSScanner+DTMarkdown.m */; }; A7ABD3E41811BEEB00494DA5 /* auto_link.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DC1811BEEB00494DA5 /* auto_link.html */; }; @@ -280,7 +557,7 @@ A7ABD4EB1811BEEB00494DA5 /* xss_quotes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E31811BEEB00494DA5 /* xss_quotes.text */; }; A7BF25C8181136530013D8D7 /* DTMarkdownParserTest.m in Sources */ = {isa = PBXBuildFile; fileRef = A7BF253C181131A70013D8D7 /* DTMarkdownParserTest.m */; }; A7BF25D6181138320013D8D7 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7BF25D5181138320013D8D7 /* Cocoa.framework */; }; - A7BF26001811385A0013D8D7 /* DTMarkdownParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BF25FE1811385A0013D8D7 /* DTMarkdownParser.h */; }; + A7BF26001811385A0013D8D7 /* DTMarkdownParser.h in Headers */ = {isa = PBXBuildFile; fileRef = A7BF25FE1811385A0013D8D7 /* DTMarkdownParser.h */; settings = {ATTRIBUTES = (Public, ); }; }; A7BF26011811385A0013D8D7 /* DTMarkdownParser.m in Sources */ = {isa = PBXBuildFile; fileRef = A7BF25FF1811385A0013D8D7 /* DTMarkdownParser.m */; }; A7BF2608181151450013D8D7 /* DTMarkdownParser.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7BF25D4181138320013D8D7 /* DTMarkdownParser.framework */; }; A7D7DF2318155ED300F4377D /* NSString+DTMarkdown.m in Sources */ = {isa = PBXBuildFile; fileRef = A7D7DF2218155ED300F4377D /* NSString+DTMarkdown.m */; }; @@ -288,6 +565,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + A7870C7A1817F89900E39311 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A7BF250018112A3B0013D8D7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A7870C2E1817F6C000E39311; + remoteInfo = "DTMarkdownParser (iOS)"; + }; A7BF25BD1811354B0013D8D7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = A7BF258C1811352D0013D8D7 /* OCMockito.xcodeproj */; @@ -325,6 +609,18 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + A7870C2D1817F6C000E39311 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ A765C45D18116AF9006B252A /* NSInvocation+DTFoundation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSInvocation+DTFoundation.h"; sourceTree = ""; }; A765C45E18116AF9006B252A /* NSInvocation+DTFoundation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSInvocation+DTFoundation.m"; sourceTree = ""; }; @@ -332,6 +628,11 @@ A765C46218117EE5006B252A /* DTInvocationRecorder.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DTInvocationRecorder.m; sourceTree = ""; }; A765C4671811906B006B252A /* DTInvocationTestFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DTInvocationTestFunctions.h; sourceTree = ""; }; A765C4681811906B006B252A /* DTInvocationTestFunctions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DTInvocationTestFunctions.m; sourceTree = ""; }; + A7870C2F1817F6C000E39311 /* libDTMarkdownParser_iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libDTMarkdownParser_iOS.a; sourceTree = BUILT_PRODUCTS_DIR; }; + A7870C3D1817F6C000E39311 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; + A7870C401817F6C000E39311 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; + A7870C5B1817F73900E39311 /* DTMarkdownParser-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DTMarkdownParser-Prefix.pch"; sourceTree = ""; }; + A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests_iOS.octest; sourceTree = BUILT_PRODUCTS_DIR; }; A78EAACA18151EF800650426 /* NSScanner+DTMarkdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSScanner+DTMarkdown.h"; sourceTree = ""; }; A78EAACB18151EF800650426 /* NSScanner+DTMarkdown.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSScanner+DTMarkdown.m"; sourceTree = ""; }; A7ABD2DC1811BEEB00494DA5 /* auto_link.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = auto_link.html; sourceTree = ""; }; @@ -599,7 +900,7 @@ A7ABD3E21811BEEB00494DA5 /* xss_quotes.tags */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xss_quotes.tags; sourceTree = ""; }; A7ABD3E31811BEEB00494DA5 /* xss_quotes.text */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = xss_quotes.text; sourceTree = ""; }; A7BF250B18112A3B0013D8D7 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - A7BF251D18112A8F0013D8D7 /* UnitTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + A7BF251D18112A8F0013D8D7 /* UnitTests_Mac.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests_Mac.octest; sourceTree = BUILT_PRODUCTS_DIR; }; A7BF251E18112A8F0013D8D7 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; A7BF253618112C8B0013D8D7 /* UnitTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "UnitTests-Info.plist"; sourceTree = ""; }; A7BF253718112C8B0013D8D7 /* UnitTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "UnitTests-Prefix.pch"; sourceTree = ""; }; @@ -619,6 +920,25 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + A7870C2C1817F6C000E39311 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870C301817F6C000E39311 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A7870C5D1817F7BB00E39311 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870C7C1817F89D00E39311 /* libDTMarkdownParser_iOS.a in Frameworks */, + A7870C611817F7BB00E39311 /* SenTestingKit.framework in Frameworks */, + A7870C631817F7BB00E39311 /* UIKit.framework in Frameworks */, + A7870C621817F7BB00E39311 /* Foundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A7BF251A18112A8F0013D8D7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -941,8 +1261,10 @@ A7BF250918112A3B0013D8D7 /* Products */ = { isa = PBXGroup; children = ( - A7BF251D18112A8F0013D8D7 /* UnitTests.octest */, + A7BF251D18112A8F0013D8D7 /* UnitTests_Mac.octest */, A7BF25D4181138320013D8D7 /* DTMarkdownParser.framework */, + A7870C2F1817F6C000E39311 /* libDTMarkdownParser_iOS.a */, + A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */, ); name = Products; sourceTree = ""; @@ -953,6 +1275,8 @@ A7BF250B18112A3B0013D8D7 /* Foundation.framework */, A7BF251E18112A8F0013D8D7 /* SenTestingKit.framework */, A7BF25D5181138320013D8D7 /* Cocoa.framework */, + A7870C3D1817F6C000E39311 /* XCTest.framework */, + A7870C401817F6C000E39311 /* UIKit.framework */, ); name = Frameworks; sourceTree = ""; @@ -960,6 +1284,7 @@ A7BF253018112C8B0013D8D7 /* Core */ = { isa = PBXGroup; children = ( + A7870C5B1817F73900E39311 /* DTMarkdownParser-Prefix.pch */, A7BF2604181138F50013D8D7 /* Framework-Mac-Prefix.pch */, A7BF2602181138B50013D8D7 /* Framework-Mac-Info.plist */, A7BF253118112C8B0013D8D7 /* Resources */, @@ -1050,9 +1375,44 @@ /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ - A7BF251C18112A8F0013D8D7 /* UnitTests */ = { + A7870C2E1817F6C000E39311 /* DTMarkdownParser (iOS) */ = { + isa = PBXNativeTarget; + buildConfigurationList = A7870C571817F6C000E39311 /* Build configuration list for PBXNativeTarget "DTMarkdownParser (iOS)" */; + buildPhases = ( + A7870C2B1817F6C000E39311 /* Sources */, + A7870C2C1817F6C000E39311 /* Frameworks */, + A7870C2D1817F6C000E39311 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "DTMarkdownParser (iOS)"; + productName = DTMarkdownParser; + productReference = A7870C2F1817F6C000E39311 /* libDTMarkdownParser_iOS.a */; + productType = "com.apple.product-type.library.static"; + }; + A7870C5F1817F7BB00E39311 /* UnitTests (iOS) */ = { + isa = PBXNativeTarget; + buildConfigurationList = A7870C6F1817F7BB00E39311 /* Build configuration list for PBXNativeTarget "UnitTests (iOS)" */; + buildPhases = ( + A7870C5C1817F7BB00E39311 /* Sources */, + A7870C5D1817F7BB00E39311 /* Frameworks */, + A7870C5E1817F7BB00E39311 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + A7870C7B1817F89900E39311 /* PBXTargetDependency */, + ); + name = "UnitTests (iOS)"; + productName = "UnitTests (iOS)"; + productReference = A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */; + productType = "com.apple.product-type.bundle"; + }; + A7BF251C18112A8F0013D8D7 /* UnitTests (Mac) */ = { isa = PBXNativeTarget; - buildConfigurationList = A7BF252918112A8F0013D8D7 /* Build configuration list for PBXNativeTarget "UnitTests" */; + buildConfigurationList = A7BF252918112A8F0013D8D7 /* Build configuration list for PBXNativeTarget "UnitTests (Mac)" */; buildPhases = ( A7BF251918112A8F0013D8D7 /* Sources */, A7BF251A18112A8F0013D8D7 /* Frameworks */, @@ -1063,9 +1423,9 @@ dependencies = ( A7BF2606181150FC0013D8D7 /* PBXTargetDependency */, ); - name = UnitTests; + name = "UnitTests (Mac)"; productName = UnitTests; - productReference = A7BF251D18112A8F0013D8D7 /* UnitTests.octest */; + productReference = A7BF251D18112A8F0013D8D7 /* UnitTests_Mac.octest */; productType = "com.apple.product-type.bundle"; }; A7BF25D3181138320013D8D7 /* Mac Framework */ = { @@ -1095,6 +1455,9 @@ LastUpgradeCheck = 0500; ORGANIZATIONNAME = Cocoanetics; TargetAttributes = { + A7870C5F1817F7BB00E39311 = { + TestTargetID = A7BF251C18112A8F0013D8D7; + }; A7BF251C18112A8F0013D8D7 = { TestTargetID = A7BF25D3181138320013D8D7; }; @@ -1118,8 +1481,10 @@ ); projectRoot = ""; targets = ( - A7BF251C18112A8F0013D8D7 /* UnitTests */, A7BF25D3181138320013D8D7 /* Mac Framework */, + A7870C2E1817F6C000E39311 /* DTMarkdownParser (iOS) */, + A7870C5F1817F7BB00E39311 /* UnitTests (iOS) */, + A7BF251C18112A8F0013D8D7 /* UnitTests (Mac) */, ); }; /* End PBXProject section */ @@ -1156,6 +1521,277 @@ /* End PBXReferenceProxy section */ /* Begin PBXResourcesBuildPhase section */ + A7870C5E1817F7BB00E39311 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870CB71817F8E500E39311 /* emacs_tail_vars.text in Resources */, + A7870D2E1817F8E500E39311 /* lists2.tags in Resources */, + A7870D6E1817F8E500E39311 /* toc_1.html in Resources */, + A7870C841817F8E500E39311 /* auto_link_safe_mode.tags in Resources */, + A7870D051817F8E500E39311 /* issue21_gt_escaping.html in Resources */, + A7870D141817F8E500E39311 /* issue54_escape_link_title.html in Resources */, + A7870C851817F8E500E39311 /* auto_link_safe_mode.text in Resources */, + A7870CF81817F8E500E39311 /* hr_spaces.html in Resources */, + A7870D1A1817F8E500E39311 /* link_defn_spaces_in_url.tags in Resources */, + A7870CE91817F8E500E39311 /* header_ids_2.text in Resources */, + A7870D1C1817F8E500E39311 /* link_nofollow.html in Resources */, + A7870CE61817F8E500E39311 /* header_ids_2.html in Resources */, + A7870D0A1817F8E500E39311 /* issue2_safe_mode_borks_markup.opts in Resources */, + A7870D801817F8E500E39311 /* wiki_tables.tags in Resources */, + A7870CAA1817F8E500E39311 /* cuddled_para_and_list.text in Resources */, + A7870D491817F8E500E39311 /* not_quite_a_list.text in Resources */, + A7870CD31817F8E500E39311 /* footnotes_letters.text in Resources */, + A7870CFF1817F8E500E39311 /* html_classes.tags in Resources */, + A7870D301817F8E500E39311 /* long_link.html in Resources */, + A7870CB11817F8E500E39311 /* emacs_head_vars.opts in Resources */, + A7870D2C1817F8E500E39311 /* lists.text in Resources */, + A7870C951817F8E500E39311 /* code_blocks_leading_line.html in Resources */, + A7870D381817F8E500E39311 /* metadata.html in Resources */, + A7870D611817F8E500E39311 /* sublist-ordered-para.tags in Resources */, + A7870CF41817F8E500E39311 /* header_ids_5.tags in Resources */, + A7870CCC1817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.text in Resources */, + A7870D4E1817F8E500E39311 /* pi_and_xinclude.opts in Resources */, + A7870D321817F8E500E39311 /* long_link.text in Resources */, + A7870C941817F8E500E39311 /* code_block_with_tabs.text in Resources */, + A7870D6A1817F8E500E39311 /* syntax_color_opts.html in Resources */, + A7870D721817F8E500E39311 /* toc_1.toc_html in Resources */, + A7870CAD1817F8E500E39311 /* demote_headers.html in Resources */, + A7870C8D1817F8E500E39311 /* basic_safe_mode_escape.text in Resources */, + A7870C7F1817F8E500E39311 /* auto_link_email_with_underscore.html in Resources */, + A7870D251817F8E500E39311 /* link_patterns_double_hit.tags in Resources */, + A7870D061817F8E500E39311 /* issue21_gt_escaping.opts in Resources */, + A7870D7B1817F8E500E39311 /* two_comments.text in Resources */, + A7870D441817F8E500E39311 /* nested_list_safe_mode.html in Resources */, + A7870CCA1817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.opts in Resources */, + A7870D811817F8E500E39311 /* wiki_tables.text in Resources */, + A7870CE01817F8E500E39311 /* header.html in Resources */, + A7870D581817F8E500E39311 /* smarty_pants.html in Resources */, + A7870CE51817F8E500E39311 /* header_ids_1.text in Resources */, + A7870C8B1817F8E500E39311 /* basic_safe_mode_escape.opts in Resources */, + A7870CD11817F8E500E39311 /* footnotes_letters.opts in Resources */, + A7870C9D1817F8E500E39311 /* codespans.html in Resources */, + A7870C8C1817F8E500E39311 /* basic_safe_mode_escape.tags in Resources */, + A7870CD51817F8E500E39311 /* footnotes_markup.opts in Resources */, + A7870CBB1817F8E500E39311 /* escapes.tags in Resources */, + A7870D4C1817F8E500E39311 /* parens_in_url_4.text in Resources */, + A7870C9A1817F8E500E39311 /* code_safe_emphasis.text in Resources */, + A7870D3F1817F8E500E39311 /* mismatched_footnotes.text in Resources */, + A7870CFD1817F8E500E39311 /* html_classes.html in Resources */, + A7870C921817F8E500E39311 /* code_block_with_tabs.html in Resources */, + A7870D781817F8E500E39311 /* tricky_anchors.html in Resources */, + A7870CC01817F8E500E39311 /* fenced_code_blocks_issue86.text in Resources */, + A7870D7F1817F8E500E39311 /* wiki_tables.opts in Resources */, + A7870D601817F8E500E39311 /* sublist-ordered-para.html in Resources */, + A7870D591817F8E500E39311 /* smarty_pants.opts in Resources */, + A7870D6B1817F8E500E39311 /* syntax_color_opts.opts in Resources */, + A7870D361817F8E500E39311 /* markdown_in_html.text in Resources */, + A7870D3B1817F8E500E39311 /* metadata.tags in Resources */, + A7870D241817F8E500E39311 /* link_patterns_double_hit.opts in Resources */, + A7870CBD1817F8E500E39311 /* fenced_code_blocks_issue86.html in Resources */, + A7870D4F1817F8E500E39311 /* pi_and_xinclude.tags in Resources */, + A7870D4A1817F8E500E39311 /* parens_in_url_4.html in Resources */, + A7870D391817F8E500E39311 /* metadata.metadata in Resources */, + A7870C931817F8E500E39311 /* code_block_with_tabs.tags in Resources */, + A7870CBC1817F8E500E39311 /* escapes.text in Resources */, + A7870CDE1817F8E500E39311 /* footnotes_underscores.tags in Resources */, + A7870CEE1817F8E500E39311 /* header_ids_4.html in Resources */, + A7870D0D1817F8E500E39311 /* issue3_bad_code_color_hack.html in Resources */, + A7870D031817F8E500E39311 /* inline_links.html in Resources */, + A7870D191817F8E500E39311 /* link_defn_spaces_in_url.html in Resources */, + A7870D7C1817F8E500E39311 /* underline_in_autolink.html in Resources */, + A7870CDF1817F8E500E39311 /* footnotes_underscores.text in Resources */, + A7870CA01817F8E500E39311 /* codespans_safe_mode.opts in Resources */, + A7870D201817F8E500E39311 /* link_patterns.html in Resources */, + A7870D761817F8E500E39311 /* toc_2.text in Resources */, + A7870D551817F8E500E39311 /* raw_html.text in Resources */, + A7870CC21817F8E500E39311 /* fenced_code_blocks_leading_line.opts in Resources */, + A7870CF01817F8E500E39311 /* header_ids_4.tags in Resources */, + A7870D3A1817F8E500E39311 /* metadata.opts in Resources */, + A7870D461817F8E500E39311 /* nested_list_safe_mode.tags in Resources */, + A7870CAF1817F8E500E39311 /* demote_headers.text in Resources */, + A7870CC41817F8E500E39311 /* fenced_code_blocks_leading_line.text in Resources */, + A7870CA61817F8E500E39311 /* cuddled_list_indented.text in Resources */, + A7870C7E1817F8E500E39311 /* auto_link.text in Resources */, + A7870D011817F8E500E39311 /* img_in_link.html in Resources */, + A7870D131817F8E500E39311 /* issue52_hang.text in Resources */, + A7870D331817F8E500E39311 /* markdown_in_html.html in Resources */, + A7870C8F1817F8E500E39311 /* blockquote.text in Resources */, + A7870D181817F8E500E39311 /* link_defn_alt_title_delims.text in Resources */, + A7870C991817F8E500E39311 /* code_safe_emphasis.tags in Resources */, + A7870D2B1817F8E500E39311 /* lists.html in Resources */, + A7870D411817F8E500E39311 /* missing_link_defn.text in Resources */, + A7870CB91817F8E500E39311 /* emphasis.text in Resources */, + A7870D621817F8E500E39311 /* sublist-ordered-para.text in Resources */, + A7870D101817F8E500E39311 /* issue3_bad_code_color_hack.text in Resources */, + A7870D771817F8E500E39311 /* toc_2.toc_html in Resources */, + A7870CBF1817F8E500E39311 /* fenced_code_blocks_issue86.tags in Resources */, + A7870D5D1817F8E500E39311 /* smarty_pants_image_links.opts in Resources */, + A7870CD41817F8E500E39311 /* footnotes_markup.html in Resources */, + A7870CC81817F8E500E39311 /* fenced_code_blocks_simple.text in Resources */, + A7870C971817F8E500E39311 /* code_safe_emphasis.html in Resources */, + A7870D3D1817F8E500E39311 /* mismatched_footnotes.html in Resources */, + A7870C961817F8E500E39311 /* code_blocks_leading_line.text in Resources */, + A7870CC71817F8E500E39311 /* fenced_code_blocks_simple.tags in Resources */, + A7870C9F1817F8E500E39311 /* codespans_safe_mode.html in Resources */, + A7870CEC1817F8E500E39311 /* header_ids_3.tags in Resources */, + A7870D151817F8E500E39311 /* issue54_escape_link_title.tags in Resources */, + A7870CEB1817F8E500E39311 /* header_ids_3.opts in Resources */, + A7870CC11817F8E500E39311 /* fenced_code_blocks_leading_line.html in Resources */, + A7870D501817F8E500E39311 /* pi_and_xinclude.text in Resources */, + A7870CA91817F8E500E39311 /* cuddled_para_and_list.tags in Resources */, + A7870CA51817F8E500E39311 /* cuddled_list_indented.tags in Resources */, + A7870CFA1817F8E500E39311 /* html5_block_tags.html in Resources */, + A7870C9E1817F8E500E39311 /* codespans.text in Resources */, + A7870D041817F8E500E39311 /* inline_links.text in Resources */, + A7870CCE1817F8E500E39311 /* footnotes.opts in Resources */, + A7870D281817F8E500E39311 /* link_patterns_edge_cases.opts in Resources */, + A7870D741817F8E500E39311 /* toc_2.opts in Resources */, + A7870CFC1817F8E500E39311 /* html5_block_tags.text in Resources */, + A7870CB41817F8E500E39311 /* emacs_tail_vars.html in Resources */, + A7870D681817F8E500E39311 /* syntax_color.tags in Resources */, + A7870CA81817F8E500E39311 /* cuddled_para_and_list.opts in Resources */, + A7870D6F1817F8E500E39311 /* toc_1.opts in Resources */, + A7870CBA1817F8E500E39311 /* escapes.html in Resources */, + A7870D651817F8E500E39311 /* sublist-para.text in Resources */, + A7870CB31817F8E500E39311 /* emacs_head_vars.text in Resources */, + A7870D791817F8E500E39311 /* tricky_anchors.text in Resources */, + A7870CE11817F8E500E39311 /* header.text in Resources */, + A7870D631817F8E500E39311 /* sublist-para.html in Resources */, + A7870C8E1817F8E500E39311 /* blockquote.html in Resources */, + A7870CA11817F8E500E39311 /* codespans_safe_mode.tags in Resources */, + A7870D561817F8E500E39311 /* ref_links.html in Resources */, + A7870CF71817F8E500E39311 /* hr.text in Resources */, + A7870C821817F8E500E39311 /* auto_link_safe_mode.html in Resources */, + A7870D4D1817F8E500E39311 /* pi_and_xinclude.html in Resources */, + A7870CDD1817F8E500E39311 /* footnotes_underscores.opts in Resources */, + A7870CDC1817F8E500E39311 /* footnotes_underscores.html in Resources */, + A7870D2F1817F8E500E39311 /* lists2.text in Resources */, + A7870CD61817F8E500E39311 /* footnotes_markup.tags in Resources */, + A7870D6C1817F8E500E39311 /* syntax_color_opts.tags in Resources */, + A7870CB51817F8E500E39311 /* emacs_tail_vars.opts in Resources */, + A7870D3E1817F8E500E39311 /* mismatched_footnotes.opts in Resources */, + A7870C891817F8E500E39311 /* basic_safe_mode.text in Resources */, + A7870C861817F8E500E39311 /* basic_safe_mode.html in Resources */, + A7870D0C1817F8E500E39311 /* issue2_safe_mode_borks_markup.text in Resources */, + A7870CC31817F8E500E39311 /* fenced_code_blocks_leading_line.tags in Resources */, + A7870C8A1817F8E500E39311 /* basic_safe_mode_escape.html in Resources */, + A7870D5C1817F8E500E39311 /* smarty_pants_image_links.html in Resources */, + A7870CF31817F8E500E39311 /* header_ids_5.opts in Resources */, + A7870CAE1817F8E500E39311 /* demote_headers.opts in Resources */, + A7870D5A1817F8E500E39311 /* smarty_pants.tags in Resources */, + A7870D371817F8E500E39311 /* markdown_in_html.toc_html in Resources */, + A7870D351817F8E500E39311 /* markdown_in_html.tags in Resources */, + A7870D731817F8E500E39311 /* toc_2.html in Resources */, + A7870C831817F8E500E39311 /* auto_link_safe_mode.opts in Resources */, + A7870C9B1817F8E500E39311 /* codeblock.html in Resources */, + A7870D221817F8E500E39311 /* link_patterns.text in Resources */, + A7870D5B1817F8E500E39311 /* smarty_pants.text in Resources */, + A7870D471817F8E500E39311 /* nested_list_safe_mode.text in Resources */, + A7870CB01817F8E500E39311 /* emacs_head_vars.html in Resources */, + A7870CEF1817F8E500E39311 /* header_ids_4.opts in Resources */, + A7870D421817F8E500E39311 /* nested_list.html in Resources */, + A7870D531817F8E500E39311 /* pyshell.text in Resources */, + A7870CDA1817F8E500E39311 /* footnotes_safe_mode_escape.tags in Resources */, + A7870CFB1817F8E500E39311 /* html5_block_tags.tags in Resources */, + A7870D4B1817F8E500E39311 /* parens_in_url_4.tags in Resources */, + A7870D521817F8E500E39311 /* pyshell.opts in Resources */, + A7870CB81817F8E500E39311 /* emphasis.html in Resources */, + A7870D291817F8E500E39311 /* link_patterns_edge_cases.tags in Resources */, + A7870CBE1817F8E500E39311 /* fenced_code_blocks_issue86.opts in Resources */, + A7870CB21817F8E500E39311 /* emacs_head_vars.tags in Resources */, + A7870D5E1817F8E500E39311 /* smarty_pants_image_links.tags in Resources */, + A7870CB61817F8E500E39311 /* emacs_tail_vars.tags in Resources */, + A7870CDB1817F8E500E39311 /* footnotes_safe_mode_escape.text in Resources */, + A7870CA21817F8E500E39311 /* codespans_safe_mode.text in Resources */, + A7870CED1817F8E500E39311 /* header_ids_3.text in Resources */, + A7870CE31817F8E500E39311 /* header_ids_1.opts in Resources */, + A7870D271817F8E500E39311 /* link_patterns_edge_cases.html in Resources */, + A7870D0F1817F8E500E39311 /* issue3_bad_code_color_hack.tags in Resources */, + A7870D481817F8E500E39311 /* not_quite_a_list.html in Resources */, + A7870D451817F8E500E39311 /* nested_list_safe_mode.opts in Resources */, + A7870D7D1817F8E500E39311 /* underline_in_autolink.text in Resources */, + A7870CD01817F8E500E39311 /* footnotes_letters.html in Resources */, + A7870D001817F8E500E39311 /* html_classes.text in Resources */, + A7870CEA1817F8E500E39311 /* header_ids_3.html in Resources */, + A7870CE21817F8E500E39311 /* header_ids_1.html in Resources */, + A7870CF21817F8E500E39311 /* header_ids_5.html in Resources */, + A7870D401817F8E500E39311 /* missing_link_defn.html in Resources */, + A7870D171817F8E500E39311 /* link_defn_alt_title_delims.html in Resources */, + A7870D661817F8E500E39311 /* syntax_color.html in Resources */, + A7870C871817F8E500E39311 /* basic_safe_mode.opts in Resources */, + A7870D511817F8E500E39311 /* pyshell.html in Resources */, + A7870CCB1817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.tags in Resources */, + A7870D111817F8E500E39311 /* issue52_hang.html in Resources */, + A7870D1F1817F8E500E39311 /* link_nofollow.text in Resources */, + A7870D211817F8E500E39311 /* link_patterns.opts in Resources */, + A7870D071817F8E500E39311 /* issue21_gt_escaping.tags in Resources */, + A7870D2A1817F8E500E39311 /* link_patterns_edge_cases.text in Resources */, + A7870D431817F8E500E39311 /* nested_list.text in Resources */, + A7870CD81817F8E500E39311 /* footnotes_safe_mode_escape.html in Resources */, + A7870CD71817F8E500E39311 /* footnotes_markup.text in Resources */, + A7870CE81817F8E500E39311 /* header_ids_2.tags in Resources */, + A7870D021817F8E500E39311 /* img_in_link.text in Resources */, + A7870CD91817F8E500E39311 /* footnotes_safe_mode_escape.opts in Resources */, + A7870D541817F8E500E39311 /* raw_html.html in Resources */, + A7870D571817F8E500E39311 /* ref_links.text in Resources */, + A7870D231817F8E500E39311 /* link_patterns_double_hit.html in Resources */, + A7870D1B1817F8E500E39311 /* link_defn_spaces_in_url.text in Resources */, + A7870CF61817F8E500E39311 /* hr.html in Resources */, + A7870D701817F8E500E39311 /* toc_1.tags in Resources */, + A7870D7E1817F8E500E39311 /* wiki_tables.html in Resources */, + A7870CE41817F8E500E39311 /* header_ids_1.tags in Resources */, + A7870CFE1817F8E500E39311 /* html_classes.opts in Resources */, + A7870CAC1817F8E500E39311 /* cuddled_with_para.text in Resources */, + A7870D341817F8E500E39311 /* markdown_in_html.opts in Resources */, + A7870D0B1817F8E500E39311 /* issue2_safe_mode_borks_markup.tags in Resources */, + A7870CCD1817F8E500E39311 /* footnotes.html in Resources */, + A7870CA31817F8E500E39311 /* cuddled_list_indented.html in Resources */, + A7870C981817F8E500E39311 /* code_safe_emphasis.opts in Resources */, + A7870CF51817F8E500E39311 /* header_ids_5.text in Resources */, + A7870C7D1817F8E500E39311 /* auto_link.html in Resources */, + A7870D831817F8E500E39311 /* xss_quotes.tags in Resources */, + A7870CC51817F8E500E39311 /* fenced_code_blocks_simple.html in Resources */, + A7870D2D1817F8E500E39311 /* lists2.html in Resources */, + A7870CE71817F8E500E39311 /* header_ids_2.opts in Resources */, + A7870D821817F8E500E39311 /* xss_quotes.html in Resources */, + A7870D121817F8E500E39311 /* issue52_hang.tags in Resources */, + A7870D1E1817F8E500E39311 /* link_nofollow.tags in Resources */, + A7870D671817F8E500E39311 /* syntax_color.opts in Resources */, + A7870D3C1817F8E500E39311 /* metadata.text in Resources */, + A7870D261817F8E500E39311 /* link_patterns_double_hit.text in Resources */, + A7870CC61817F8E500E39311 /* fenced_code_blocks_simple.opts in Resources */, + A7870D5F1817F8E500E39311 /* smarty_pants_image_links.text in Resources */, + A7870D841817F8E500E39311 /* xss_quotes.text in Resources */, + A7870CA41817F8E500E39311 /* cuddled_list_indented.opts in Resources */, + A7870D751817F8E500E39311 /* toc_2.tags in Resources */, + A7870CD21817F8E500E39311 /* footnotes_letters.tags in Resources */, + A7870D1D1817F8E500E39311 /* link_nofollow.opts in Resources */, + A7870D081817F8E500E39311 /* issue21_gt_escaping.text in Resources */, + A7870D641817F8E500E39311 /* sublist-para.tags in Resources */, + A7870D311817F8E500E39311 /* long_link.tags in Resources */, + A7870CCF1817F8E500E39311 /* footnotes.text in Resources */, + A7870CC91817F8E500E39311 /* fenced_code_blocks_syntax_highlighting.html in Resources */, + A7870C911817F8E500E39311 /* blockquote_with_pre.text in Resources */, + A7870D691817F8E500E39311 /* syntax_color.text in Resources */, + A7870D0E1817F8E500E39311 /* issue3_bad_code_color_hack.opts in Resources */, + A7870CF91817F8E500E39311 /* hr_spaces.text in Resources */, + A7870C811817F8E500E39311 /* auto_link_email_with_underscore.text in Resources */, + A7870C801817F8E500E39311 /* auto_link_email_with_underscore.tags in Resources */, + A7870C901817F8E500E39311 /* blockquote_with_pre.html in Resources */, + A7870CAB1817F8E500E39311 /* cuddled_with_para.html in Resources */, + A7870D6D1817F8E500E39311 /* syntax_color_opts.text in Resources */, + A7870D7A1817F8E500E39311 /* two_comments.html in Resources */, + A7870D711817F8E500E39311 /* toc_1.text in Resources */, + A7870D091817F8E500E39311 /* issue2_safe_mode_borks_markup.html in Resources */, + A7870C9C1817F8E500E39311 /* codeblock.text in Resources */, + A7870CF11817F8E500E39311 /* header_ids_4.text in Resources */, + A7870CA71817F8E500E39311 /* cuddled_para_and_list.html in Resources */, + A7870D161817F8E500E39311 /* issue54_escape_link_title.text in Resources */, + A7870C881817F8E500E39311 /* basic_safe_mode.tags in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A7BF251B18112A8F0013D8D7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1437,6 +2073,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + A7870C2B1817F6C000E39311 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870C5A1817F70700E39311 /* NSScanner+DTMarkdown.m in Sources */, + A7870C591817F70700E39311 /* DTMarkdownParser.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A7870C5C1817F7BB00E39311 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870C761817F7D800E39311 /* NSString+DTMarkdown.m in Sources */, + A7870C771817F7D800E39311 /* DTMarkdownParserTest.m in Sources */, + A7870C741817F7D800E39311 /* DTInvocationTestFunctions.m in Sources */, + A7870C731817F7D800E39311 /* DTInvocationRecorder.m in Sources */, + A7870C781817F7D800E39311 /* NSScannerDTMarkdownTest.m in Sources */, + A7870C751817F7D800E39311 /* NSInvocation+DTFoundation.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A7BF251918112A8F0013D8D7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1462,6 +2120,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + A7870C7B1817F89900E39311 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A7870C2E1817F6C000E39311 /* DTMarkdownParser (iOS) */; + targetProxy = A7870C7A1817F89900E39311 /* PBXContainerItemProxy */; + }; A7BF2606181150FC0013D8D7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = A7BF25D3181138320013D8D7 /* Mac Framework */; @@ -1470,6 +2133,129 @@ /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ + A7870C4D1817F6C000E39311 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = YES; + DSTROOT = /tmp/DTMarkdownParser.dst; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Core/DTMarkdownParser-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = DTMarkdownParser_iOS; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + A7870C4E1817F6C000E39311 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = YES; + DSTROOT = /tmp/DTMarkdownParser.dst; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Core/DTMarkdownParser-Prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = DTMarkdownParser_iOS; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Coverage; + }; + A7870C4F1817F6C000E39311 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = YES; + DSTROOT = /tmp/DTMarkdownParser.dst; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Core/DTMarkdownParser-Prefix.pch"; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = DTMarkdownParser_iOS; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + A7870C701817F7BB00E39311 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Test/UnitTests-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Test/UnitTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = UnitTests_iOS; + SDKROOT = iphoneos; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + A7870C711817F7BB00E39311 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Test/UnitTests-Prefix.pch"; + INFOPLIST_FILE = "Test/UnitTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = UnitTests_iOS; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = octest; + }; + name = Coverage; + }; + A7870C721817F7BB00E39311 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD)"; + CLANG_ENABLE_MODULES = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + "$(DEVELOPER_FRAMEWORKS_DIR)", + ); + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Test/UnitTests-Prefix.pch"; + INFOPLIST_FILE = "Test/UnitTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = UnitTests_iOS; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; A78EAAD118152FC500650426 /* Coverage */ = { isa = XCBuildConfiguration; buildSettings = { @@ -1532,7 +2318,7 @@ ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = UnitTests_Mac; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/**"; WRAPPER_EXTENSION = octest; }; @@ -1651,7 +2437,7 @@ ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = UnitTests_Mac; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/**"; WRAPPER_EXTENSION = octest; }; @@ -1675,7 +2461,7 @@ ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = UnitTests_Mac; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/**"; WRAPPER_EXTENSION = octest; }; @@ -1722,6 +2508,24 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + A7870C571817F6C000E39311 /* Build configuration list for PBXNativeTarget "DTMarkdownParser (iOS)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A7870C4D1817F6C000E39311 /* Debug */, + A7870C4E1817F6C000E39311 /* Coverage */, + A7870C4F1817F6C000E39311 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + A7870C6F1817F7BB00E39311 /* Build configuration list for PBXNativeTarget "UnitTests (iOS)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A7870C701817F7BB00E39311 /* Debug */, + A7870C711817F7BB00E39311 /* Coverage */, + A7870C721817F7BB00E39311 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; A7BF250318112A3B0013D8D7 /* Build configuration list for PBXProject "DTMarkdownParser" */ = { isa = XCConfigurationList; buildConfigurations = ( @@ -1732,7 +2536,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A7BF252918112A8F0013D8D7 /* Build configuration list for PBXNativeTarget "UnitTests" */ = { + A7BF252918112A8F0013D8D7 /* Build configuration list for PBXNativeTarget "UnitTests (Mac)" */ = { isa = XCConfigurationList; buildConfigurations = ( A7BF252A18112A8F0013D8D7 /* Debug */, diff --git a/Test/UnitTests-Prefix.pch b/Test/UnitTests-Prefix.pch index 6bd5b36..e7a6406 100644 --- a/Test/UnitTests-Prefix.pch +++ b/Test/UnitTests-Prefix.pch @@ -5,6 +5,14 @@ // #ifdef __OBJC__ - #import + #import #import + +#if TARGET_OS_IPHONE + #import +#elif TARGET_OS_MAC && !TARGET_OS_IPHONE + #import + #import +#endif + #endif From b86c2882e5104cbb38f066ae080a2e066fe1107a Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:36:10 +0200 Subject: [PATCH 19/26] renamed Mac target --- DTMarkdownParser.xcodeproj/project.pbxproj | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index 3e0e45a..c13cd17 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -1428,9 +1428,9 @@ productReference = A7BF251D18112A8F0013D8D7 /* UnitTests_Mac.octest */; productType = "com.apple.product-type.bundle"; }; - A7BF25D3181138320013D8D7 /* Mac Framework */ = { + A7BF25D3181138320013D8D7 /* DTMarkdownParser (Mac) */ = { isa = PBXNativeTarget; - buildConfigurationList = A7BF25F8181138320013D8D7 /* Build configuration list for PBXNativeTarget "Mac Framework" */; + buildConfigurationList = A7BF25F8181138320013D8D7 /* Build configuration list for PBXNativeTarget "DTMarkdownParser (Mac)" */; buildPhases = ( A7BF25CF181138320013D8D7 /* Sources */, A7BF25D0181138320013D8D7 /* Frameworks */, @@ -1441,7 +1441,7 @@ ); dependencies = ( ); - name = "Mac Framework"; + name = "DTMarkdownParser (Mac)"; productName = "Mac Framework"; productReference = A7BF25D4181138320013D8D7 /* DTMarkdownParser.framework */; productType = "com.apple.product-type.framework"; @@ -1481,7 +1481,7 @@ ); projectRoot = ""; targets = ( - A7BF25D3181138320013D8D7 /* Mac Framework */, + A7BF25D3181138320013D8D7 /* DTMarkdownParser (Mac) */, A7870C2E1817F6C000E39311 /* DTMarkdownParser (iOS) */, A7870C5F1817F7BB00E39311 /* UnitTests (iOS) */, A7BF251C18112A8F0013D8D7 /* UnitTests (Mac) */, @@ -2127,7 +2127,7 @@ }; A7BF2606181150FC0013D8D7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; - target = A7BF25D3181138320013D8D7 /* Mac Framework */; + target = A7BF25D3181138320013D8D7 /* DTMarkdownParser (Mac) */; targetProxy = A7BF2605181150FC0013D8D7 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ @@ -2341,6 +2341,7 @@ INFOPLIST_FILE = "Core/Framework-Mac-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = DTMarkdownParser; + SKIP_INSTALL = YES; WRAPPER_EXTENSION = framework; }; name = Coverage; @@ -2484,6 +2485,7 @@ INFOPLIST_FILE = "Core/Framework-Mac-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = DTMarkdownParser; + SKIP_INSTALL = YES; WRAPPER_EXTENSION = framework; }; name = Debug; @@ -2501,6 +2503,7 @@ INFOPLIST_FILE = "Core/Framework-Mac-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = DTMarkdownParser; + SKIP_INSTALL = YES; WRAPPER_EXTENSION = framework; }; name = Release; @@ -2546,7 +2549,7 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - A7BF25F8181138320013D8D7 /* Build configuration list for PBXNativeTarget "Mac Framework" */ = { + A7BF25F8181138320013D8D7 /* Build configuration list for PBXNativeTarget "DTMarkdownParser (Mac)" */ = { isa = XCConfigurationList; buildConfigurations = ( A7BF25F9181138320013D8D7 /* Debug */, From 38a9b1031bf65924c5b41c908d3c0c9fcdaaa995 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:39:29 +0200 Subject: [PATCH 20/26] Renamed shared schemes now that there are iOS and Mac targets --- .travis.yml | 2 +- ...scheme => DTMarkdownParser (Mac).xcscheme} | 6 +- .../xcschemes/DTMarkdownParser (iOS).xcscheme | 69 +++++++++++++++++++ 3 files changed, 73 insertions(+), 4 deletions(-) rename DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/{Mac Framework.xcscheme => DTMarkdownParser (Mac).xcscheme} (93%) create mode 100644 DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (iOS).xcscheme diff --git a/.travis.yml b/.travis.yml index fa0f2b8..3da1913 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,7 +5,7 @@ before_script: - sudo easy_install cpp-coveralls script: - - xctool -project DTMarkdownParser.xcodeproj -scheme "Mac Framework" test -configuration Coverage -arch x86_64 ONLY_ACTIVE_ARCH=NO + - xctool -project DTMarkdownParser.xcodeproj -scheme "DTMarkdownParser (Mac)" test -configuration Coverage -arch x86_64 ONLY_ACTIVE_ARCH=NO after_success: - ./coveralls.rb --extension m --exclude-folder Demo --exclude-folder Test --exclude-folder Externals diff --git a/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/Mac Framework.xcscheme b/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (Mac).xcscheme similarity index 93% rename from DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/Mac Framework.xcscheme rename to DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (Mac).xcscheme index dbd8e34..84e108a 100644 --- a/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/Mac Framework.xcscheme +++ b/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (Mac).xcscheme @@ -16,7 +16,7 @@ BuildableIdentifier = "primary" BlueprintIdentifier = "A7BF25D3181138320013D8D7" BuildableName = "DTMarkdownParser.framework" - BlueprintName = "Mac Framework" + BlueprintName = "DTMarkdownParser (Mac)" ReferencedContainer = "container:DTMarkdownParser.xcodeproj"> @@ -33,8 +33,8 @@ diff --git a/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (iOS).xcscheme b/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (iOS).xcscheme new file mode 100644 index 0000000..d1c0cca --- /dev/null +++ b/DTMarkdownParser.xcodeproj/xcshareddata/xcschemes/DTMarkdownParser (iOS).xcscheme @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a6f9a3a5078fb2d79226f92223b2c981c62281ad Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:41:38 +0200 Subject: [PATCH 21/26] moved some items to implemented --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 0c3c3b6..d092fee 100644 --- a/README.md +++ b/README.md @@ -47,13 +47,13 @@ Implemented - Images (inline and reference) - Linebreaks Handling (GitHub versus Gruber) - lists (ordered or unordered) +- lists (stacked) +- forced linking via angle brackets To Do ----- -- lists (stacked) - auto linking of http URLs -- forced linking via angle brackets - character escaping - inline HTML (? should we ever do this ?) - multiple-level quoting and code blocks From 713f8e3c86cdad19abcdf9a80fb37a0797a548c5 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:44:54 +0200 Subject: [PATCH 22/26] moved deploy targets to project --- DTMarkdownParser.xcodeproj/project.pbxproj | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index c13cd17..490e6c8 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -2145,7 +2145,6 @@ "DEBUG=1", "$(inherited)", ); - IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = DTMarkdownParser_iOS; SDKROOT = iphoneos; @@ -2161,7 +2160,6 @@ DSTROOT = /tmp/DTMarkdownParser.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Core/DTMarkdownParser-Prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = DTMarkdownParser_iOS; SDKROOT = iphoneos; @@ -2178,7 +2176,6 @@ DSTROOT = /tmp/DTMarkdownParser.dst; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Core/DTMarkdownParser-Prefix.pch"; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = DTMarkdownParser_iOS; SDKROOT = iphoneos; @@ -2204,7 +2201,6 @@ "$(inherited)", ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = UnitTests_iOS; SDKROOT = iphoneos; @@ -2225,7 +2221,6 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Test/UnitTests-Prefix.pch"; INFOPLIST_FILE = "Test/UnitTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = UnitTests_iOS; SDKROOT = iphoneos; @@ -2247,7 +2242,6 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Test/UnitTests-Prefix.pch"; INFOPLIST_FILE = "Test/UnitTests-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 7.0; OTHER_LDFLAGS = "-ObjC"; PRODUCT_NAME = UnitTests_iOS; SDKROOT = iphoneos; @@ -2290,7 +2284,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + IPHONEOS_DEPLOYMENT_TARGET = 4.3; + MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; @@ -2317,7 +2312,6 @@ "${PROJECT_DIR}/**", ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = UnitTests_Mac; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/**"; WRAPPER_EXTENSION = octest; @@ -2339,7 +2333,6 @@ "$(inherited)", ); INFOPLIST_FILE = "Core/Framework-Mac-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = DTMarkdownParser; SKIP_INSTALL = YES; WRAPPER_EXTENSION = framework; @@ -2378,7 +2371,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + IPHONEOS_DEPLOYMENT_TARGET = 4.3; + MACOSX_DEPLOYMENT_TARGET = 10.8; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; }; @@ -2411,7 +2405,8 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; + IPHONEOS_DEPLOYMENT_TARGET = 4.3; + MACOSX_DEPLOYMENT_TARGET = 10.8; SDKROOT = macosx; }; name = Release; @@ -2437,7 +2432,6 @@ "${PROJECT_DIR}/**", ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = UnitTests_Mac; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/**"; WRAPPER_EXTENSION = octest; @@ -2461,7 +2455,6 @@ "${PROJECT_DIR}/**", ); INFOPLIST_FILE = "Test/UnitTests-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = UnitTests_Mac; USER_HEADER_SEARCH_PATHS = "${PROJECT_DIR}/**"; WRAPPER_EXTENSION = octest; @@ -2483,7 +2476,6 @@ "$(inherited)", ); INFOPLIST_FILE = "Core/Framework-Mac-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = DTMarkdownParser; SKIP_INSTALL = YES; WRAPPER_EXTENSION = framework; @@ -2501,7 +2493,6 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Core/Framework-Mac-Prefix.pch"; INFOPLIST_FILE = "Core/Framework-Mac-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.8; PRODUCT_NAME = DTMarkdownParser; SKIP_INSTALL = YES; WRAPPER_EXTENSION = framework; From 73e7833106b390e1918717916f50001095072a88 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:48:37 +0200 Subject: [PATCH 23/26] Added first podspec --- DTMarkdownParser.podspec | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 DTMarkdownParser.podspec diff --git a/DTMarkdownParser.podspec b/DTMarkdownParser.podspec new file mode 100644 index 0000000..527f0c1 --- /dev/null +++ b/DTMarkdownParser.podspec @@ -0,0 +1,14 @@ +Pod::Spec.new do |spec| + spec.name = 'DTMarkdownParser' + spec.version = '0.1.0' + spec.platform = :ios, '4.3' + spec.platform = :osx, '10.8' + spec.license = 'BSD' + spec.source = { :git => 'https://github.com/Cocoanetics/DTMarkdownParser.git', :tag => spec.version.to_s } + spec.source_files = 'Core/Source/*.{h,m}' + spec.requires_arc = true + spec.homepage = 'https://github.com/Cocoanetics/DTMarkdownParser' + spec.summary = 'Methods to allow using HTML code with CoreText.' + spec.author = { 'Oliver Drobnik' => 'oliver@cocoanetics.com' } +end + From 9ad8a6a93b0d8599a84b94bc601b7931ba740e71 Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 14:58:43 +0200 Subject: [PATCH 24/26] Added Demo (Mac) stub --- DTMarkdownParser.xcodeproj/project.pbxproj | 173 ++++++- Demo/Mac/Demo-Info.plist | 55 +++ Demo/Mac/Demo-Prefix.pch | 9 + Demo/Mac/Resources/Credits.rtf | 29 ++ Demo/Mac/Resources/Document.xib | 44 ++ Demo/Mac/Resources/MainMenu.xib | 451 ++++++++++++++++++ Demo/Mac/Source/Base.lproj/Document.xib | 44 ++ Demo/Mac/Source/Base.lproj/MainMenu.xib | 451 ++++++++++++++++++ Demo/Mac/Source/Document.h | 13 + Demo/Mac/Source/Document.m | 59 +++ .../AppIcon.appiconset/Contents.json | 58 +++ Demo/Mac/Source/en.lproj/Credits.rtf | 29 ++ Demo/Mac/Source/en.lproj/InfoPlist.strings | 2 + Demo/Mac/Source/main.m | 14 + 14 files changed, 1430 insertions(+), 1 deletion(-) create mode 100644 Demo/Mac/Demo-Info.plist create mode 100644 Demo/Mac/Demo-Prefix.pch create mode 100644 Demo/Mac/Resources/Credits.rtf create mode 100644 Demo/Mac/Resources/Document.xib create mode 100644 Demo/Mac/Resources/MainMenu.xib create mode 100644 Demo/Mac/Source/Base.lproj/Document.xib create mode 100644 Demo/Mac/Source/Base.lproj/MainMenu.xib create mode 100644 Demo/Mac/Source/Document.h create mode 100644 Demo/Mac/Source/Document.m create mode 100644 Demo/Mac/Source/Images.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Demo/Mac/Source/en.lproj/Credits.rtf create mode 100644 Demo/Mac/Source/en.lproj/InfoPlist.strings create mode 100644 Demo/Mac/Source/main.m diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index 490e6c8..99fb8f4 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -289,6 +289,12 @@ A7870D821817F8E500E39311 /* xss_quotes.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E11811BEEB00494DA5 /* xss_quotes.html */; }; A7870D831817F8E500E39311 /* xss_quotes.tags in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E21811BEEB00494DA5 /* xss_quotes.tags */; }; A7870D841817F8E500E39311 /* xss_quotes.text in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD3E31811BEEB00494DA5 /* xss_quotes.text */; }; + A7870D8A1817FDEC00E39311 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7BF25D5181138320013D8D7 /* Cocoa.framework */; }; + A7870DC51817FE8D00E39311 /* Document.m in Sources */ = {isa = PBXBuildFile; fileRef = A7870DC41817FE8D00E39311 /* Document.m */; }; + A7870DC91817FED400E39311 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A7870DC81817FED400E39311 /* main.m */; }; + A7870DCD1817FF3800E39311 /* Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = A7870DCA1817FF3800E39311 /* Document.xib */; }; + A7870DCE1817FF3800E39311 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A7870DCB1817FF3800E39311 /* MainMenu.xib */; }; + A7870DCF1817FF3800E39311 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A7870DCC1817FF3800E39311 /* Credits.rtf */; }; A78EAACC18151EF800650426 /* NSScanner+DTMarkdown.h in Headers */ = {isa = PBXBuildFile; fileRef = A78EAACA18151EF800650426 /* NSScanner+DTMarkdown.h */; }; A78EAACD18151EF800650426 /* NSScanner+DTMarkdown.m in Sources */ = {isa = PBXBuildFile; fileRef = A78EAACB18151EF800650426 /* NSScanner+DTMarkdown.m */; }; A7ABD3E41811BEEB00494DA5 /* auto_link.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DC1811BEEB00494DA5 /* auto_link.html */; }; @@ -633,6 +639,18 @@ A7870C401817F6C000E39311 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; A7870C5B1817F73900E39311 /* DTMarkdownParser-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DTMarkdownParser-Prefix.pch"; sourceTree = ""; }; A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests_iOS.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + A7870D891817FDEC00E39311 /* Demo (Mac).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Demo (Mac).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + A7870D8C1817FDEC00E39311 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + A7870D8D1817FDEC00E39311 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + A7870D8E1817FDEC00E39311 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + A7870DC31817FE8D00E39311 /* Document.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Document.h; sourceTree = ""; }; + A7870DC41817FE8D00E39311 /* Document.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Document.m; sourceTree = ""; }; + A7870DC61817FEC900E39311 /* Demo-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Demo-Info.plist"; sourceTree = ""; }; + A7870DC71817FEC900E39311 /* Demo-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Demo-Prefix.pch"; sourceTree = ""; }; + A7870DC81817FED400E39311 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + A7870DCA1817FF3800E39311 /* Document.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Document.xib; sourceTree = ""; }; + A7870DCB1817FF3800E39311 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = ""; }; + A7870DCC1817FF3800E39311 /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; A78EAACA18151EF800650426 /* NSScanner+DTMarkdown.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSScanner+DTMarkdown.h"; sourceTree = ""; }; A78EAACB18151EF800650426 /* NSScanner+DTMarkdown.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSScanner+DTMarkdown.m"; sourceTree = ""; }; A7ABD2DC1811BEEB00494DA5 /* auto_link.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = auto_link.html; sourceTree = ""; }; @@ -939,6 +957,14 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A7870D861817FDEC00E39311 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870D8A1817FDEC00E39311 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A7BF251A18112A8F0013D8D7 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -960,6 +986,55 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + A7870D8B1817FDEC00E39311 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + A7870D8C1817FDEC00E39311 /* AppKit.framework */, + A7870D8D1817FDEC00E39311 /* CoreData.framework */, + A7870D8E1817FDEC00E39311 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + A7870DBF1817FE4900E39311 /* Demo */ = { + isa = PBXGroup; + children = ( + A7870DC01817FE4900E39311 /* Mac */, + ); + path = Demo; + sourceTree = ""; + }; + A7870DC01817FE4900E39311 /* Mac */ = { + isa = PBXGroup; + children = ( + A7870DC61817FEC900E39311 /* Demo-Info.plist */, + A7870DC71817FEC900E39311 /* Demo-Prefix.pch */, + A7870DC11817FE7F00E39311 /* Resources */, + A7870DC21817FE7F00E39311 /* Source */, + ); + path = Mac; + sourceTree = ""; + }; + A7870DC11817FE7F00E39311 /* Resources */ = { + isa = PBXGroup; + children = ( + A7870DCC1817FF3800E39311 /* Credits.rtf */, + A7870DCA1817FF3800E39311 /* Document.xib */, + A7870DCB1817FF3800E39311 /* MainMenu.xib */, + ); + path = Resources; + sourceTree = ""; + }; + A7870DC21817FE7F00E39311 /* Source */ = { + isa = PBXGroup; + children = ( + A7870DC31817FE8D00E39311 /* Document.h */, + A7870DC41817FE8D00E39311 /* Document.m */, + A7870DC81817FED400E39311 /* main.m */, + ); + path = Source; + sourceTree = ""; + }; A7A244CE1817BE5C00FDB3FC /* Utilities */ = { isa = PBXGroup; children = ( @@ -1249,9 +1324,10 @@ A7BF24FF18112A3B0013D8D7 = { isa = PBXGroup; children = ( + A7BF253018112C8B0013D8D7 /* Core */, + A7870DBF1817FE4900E39311 /* Demo */, A7D7DF2418156DE700F4377D /* Documentation */, A7BF253E1811352D0013D8D7 /* Externals */, - A7BF253018112C8B0013D8D7 /* Core */, A7BF253318112C8B0013D8D7 /* Test */, A7BF250A18112A3B0013D8D7 /* Frameworks */, A7BF250918112A3B0013D8D7 /* Products */, @@ -1265,6 +1341,7 @@ A7BF25D4181138320013D8D7 /* DTMarkdownParser.framework */, A7870C2F1817F6C000E39311 /* libDTMarkdownParser_iOS.a */, A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */, + A7870D891817FDEC00E39311 /* Demo (Mac).app */, ); name = Products; sourceTree = ""; @@ -1277,6 +1354,7 @@ A7BF25D5181138320013D8D7 /* Cocoa.framework */, A7870C3D1817F6C000E39311 /* XCTest.framework */, A7870C401817F6C000E39311 /* UIKit.framework */, + A7870D8B1817FDEC00E39311 /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; @@ -1410,6 +1488,23 @@ productReference = A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */; productType = "com.apple.product-type.bundle"; }; + A7870D881817FDEC00E39311 /* Demo (Mac) */ = { + isa = PBXNativeTarget; + buildConfigurationList = A7870DB71817FDED00E39311 /* Build configuration list for PBXNativeTarget "Demo (Mac)" */; + buildPhases = ( + A7870D851817FDEC00E39311 /* Sources */, + A7870D861817FDEC00E39311 /* Frameworks */, + A7870D871817FDEC00E39311 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Demo (Mac)"; + productName = "Demo (Mac)"; + productReference = A7870D891817FDEC00E39311 /* Demo (Mac).app */; + productType = "com.apple.product-type.application"; + }; A7BF251C18112A8F0013D8D7 /* UnitTests (Mac) */ = { isa = PBXNativeTarget; buildConfigurationList = A7BF252918112A8F0013D8D7 /* Build configuration list for PBXNativeTarget "UnitTests (Mac)" */; @@ -1469,6 +1564,7 @@ hasScannedForEncodings = 0; knownRegions = ( en, + Base, ); mainGroup = A7BF24FF18112A3B0013D8D7; productRefGroup = A7BF250918112A3B0013D8D7 /* Products */; @@ -1485,6 +1581,7 @@ A7870C2E1817F6C000E39311 /* DTMarkdownParser (iOS) */, A7870C5F1817F7BB00E39311 /* UnitTests (iOS) */, A7BF251C18112A8F0013D8D7 /* UnitTests (Mac) */, + A7870D881817FDEC00E39311 /* Demo (Mac) */, ); }; /* End PBXProject section */ @@ -1792,6 +1889,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A7870D871817FDEC00E39311 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870DCD1817FF3800E39311 /* Document.xib in Resources */, + A7870DCF1817FF3800E39311 /* Credits.rtf in Resources */, + A7870DCE1817FF3800E39311 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A7BF251B18112A8F0013D8D7 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -2095,6 +2202,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A7870D851817FDEC00E39311 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A7870DC51817FE8D00E39311 /* Document.m in Sources */, + A7870DC91817FED400E39311 /* main.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; A7BF251918112A8F0013D8D7 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -2250,6 +2366,52 @@ }; name = Release; }; + A7870DB81817FDED00E39311 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + A7870DB91817FDED00E39311 /* Coverage */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; + INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Coverage; + }; + A7870DBA1817FDED00E39311 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + COMBINE_HIDPI_IMAGES = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; + INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; A78EAAD118152FC500650426 /* Coverage */ = { isa = XCBuildConfiguration; buildSettings = { @@ -2520,6 +2682,15 @@ ); defaultConfigurationIsVisible = 0; }; + A7870DB71817FDED00E39311 /* Build configuration list for PBXNativeTarget "Demo (Mac)" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A7870DB81817FDED00E39311 /* Debug */, + A7870DB91817FDED00E39311 /* Coverage */, + A7870DBA1817FDED00E39311 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; A7BF250318112A3B0013D8D7 /* Build configuration list for PBXProject "DTMarkdownParser" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/Demo/Mac/Demo-Info.plist b/Demo/Mac/Demo-Info.plist new file mode 100644 index 0000000..a0e0e7d --- /dev/null +++ b/Demo/Mac/Demo-Info.plist @@ -0,0 +1,55 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + markdown + + CFBundleTypeIconFile + + CFBundleTypeName + DocumentType + CFBundleTypeOSTypes + + ???? + + CFBundleTypeRole + Editor + NSDocumentClass + Document + + + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + cocoanetics.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2013 Cocoanetics. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/Demo/Mac/Demo-Prefix.pch b/Demo/Mac/Demo-Prefix.pch new file mode 100644 index 0000000..926a42b --- /dev/null +++ b/Demo/Mac/Demo-Prefix.pch @@ -0,0 +1,9 @@ +// +// Prefix header +// +// The contents of this file are implicitly included at the beginning of every source file. +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Demo/Mac/Resources/Credits.rtf b/Demo/Mac/Resources/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/Demo/Mac/Resources/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/Demo/Mac/Resources/Document.xib b/Demo/Mac/Resources/Document.xib new file mode 100644 index 0000000..b30d47d --- /dev/null +++ b/Demo/Mac/Resources/Document.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/Mac/Resources/MainMenu.xib b/Demo/Mac/Resources/MainMenu.xib new file mode 100644 index 0000000..b2272a6 --- /dev/null +++ b/Demo/Mac/Resources/MainMenu.xib @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + Left to Right + + + + Right to Left + + + + + + + + Default + + + + Left to Right + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/Mac/Source/Base.lproj/Document.xib b/Demo/Mac/Source/Base.lproj/Document.xib new file mode 100644 index 0000000..b30d47d --- /dev/null +++ b/Demo/Mac/Source/Base.lproj/Document.xib @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demo/Mac/Source/Base.lproj/MainMenu.xib b/Demo/Mac/Source/Base.lproj/MainMenu.xib new file mode 100644 index 0000000..b2272a6 --- /dev/null +++ b/Demo/Mac/Source/Base.lproj/MainMenu.xib @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Default + + + + Left to Right + + + + Right to Left + + + + + + + + Default + + + + Left to Right + + + + Right to Left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Demo/Mac/Source/Document.h b/Demo/Mac/Source/Document.h new file mode 100644 index 0000000..4cb604c --- /dev/null +++ b/Demo/Mac/Source/Document.h @@ -0,0 +1,13 @@ +// +// Document.h +// Demo (Mac) +// +// Created by Oliver Drobnik on 23.10.13. +// Copyright (c) 2013 Cocoanetics. All rights reserved. +// + +#import + +@interface Document : NSDocument + +@end diff --git a/Demo/Mac/Source/Document.m b/Demo/Mac/Source/Document.m new file mode 100644 index 0000000..c671913 --- /dev/null +++ b/Demo/Mac/Source/Document.m @@ -0,0 +1,59 @@ +// +// Document.m +// Demo (Mac) +// +// Created by Oliver Drobnik on 23.10.13. +// Copyright (c) 2013 Cocoanetics. All rights reserved. +// + +#import "Document.h" + +@implementation Document + +- (id)init +{ + self = [super init]; + if (self) { + // Add your subclass-specific initialization here. + } + return self; +} + +- (NSString *)windowNibName +{ + // Override returning the nib file name of the document + // If you need to use a subclass of NSWindowController or if your document supports multiple NSWindowControllers, you should remove this method and override -makeWindowControllers instead. + return @"Document"; +} + +- (void)windowControllerDidLoadNib:(NSWindowController *)aController +{ + [super windowControllerDidLoadNib:aController]; + // Add any code here that needs to be executed once the windowController has loaded the document's window. +} + ++ (BOOL)autosavesInPlace +{ + return YES; +} + +- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to write your document to data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning nil. + // You can also choose to override -fileWrapperOfType:error:, -writeToURL:ofType:error:, or -writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. + NSException *exception = [NSException exceptionWithName:@"UnimplementedMethod" reason:[NSString stringWithFormat:@"%@ is unimplemented", NSStringFromSelector(_cmd)] userInfo:nil]; + @throw exception; + return nil; +} + +- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError +{ + // Insert code here to read your document from the given data of the specified type. If outError != NULL, ensure that you create and set an appropriate error when returning NO. + // You can also choose to override -readFromFileWrapper:ofType:error: or -readFromURL:ofType:error: instead. + // If you override either of these, you should also override -isEntireFileLoaded to return NO if the contents are lazily loaded. + NSException *exception = [NSException exceptionWithName:@"UnimplementedMethod" reason:[NSString stringWithFormat:@"%@ is unimplemented", NSStringFromSelector(_cmd)] userInfo:nil]; + @throw exception; + return YES; +} + +@end diff --git a/Demo/Mac/Source/Images.xcassets/AppIcon.appiconset/Contents.json b/Demo/Mac/Source/Images.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..2db2b1c --- /dev/null +++ b/Demo/Mac/Source/Images.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,58 @@ +{ + "images" : [ + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "16x16", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "32x32", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "128x128", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "256x256", + "scale" : "2x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "1x" + }, + { + "idiom" : "mac", + "size" : "512x512", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/Demo/Mac/Source/en.lproj/Credits.rtf b/Demo/Mac/Source/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/Demo/Mac/Source/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/Demo/Mac/Source/en.lproj/InfoPlist.strings b/Demo/Mac/Source/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Demo/Mac/Source/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Demo/Mac/Source/main.m b/Demo/Mac/Source/main.m new file mode 100644 index 0000000..d422bb0 --- /dev/null +++ b/Demo/Mac/Source/main.m @@ -0,0 +1,14 @@ +// +// main.m +// Demo (Mac) +// +// Created by Oliver Drobnik on 23.10.13. +// Copyright (c) 2013 Cocoanetics. All rights reserved. +// + +#import + +int main(int argc, const char * argv[]) +{ + return NSApplicationMain(argc, argv); +} From c8c34b470276f4ec91fabcecf2e309512d4c883d Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 15:00:35 +0200 Subject: [PATCH 25/26] Renamed Demo --- DTMarkdownParser.xcodeproj/project.pbxproj | 37 ++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index 99fb8f4..ad25f01 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -295,6 +295,7 @@ A7870DCD1817FF3800E39311 /* Document.xib in Resources */ = {isa = PBXBuildFile; fileRef = A7870DCA1817FF3800E39311 /* Document.xib */; }; A7870DCE1817FF3800E39311 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A7870DCB1817FF3800E39311 /* MainMenu.xib */; }; A7870DCF1817FF3800E39311 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A7870DCC1817FF3800E39311 /* Credits.rtf */; }; + A7870DD61817FFCE00E39311 /* DTMarkdownParser.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = A7BF25D4181138320013D8D7 /* DTMarkdownParser.framework */; }; A78EAACC18151EF800650426 /* NSScanner+DTMarkdown.h in Headers */ = {isa = PBXBuildFile; fileRef = A78EAACA18151EF800650426 /* NSScanner+DTMarkdown.h */; }; A78EAACD18151EF800650426 /* NSScanner+DTMarkdown.m in Sources */ = {isa = PBXBuildFile; fileRef = A78EAACB18151EF800650426 /* NSScanner+DTMarkdown.m */; }; A7ABD3E41811BEEB00494DA5 /* auto_link.html in Resources */ = {isa = PBXBuildFile; fileRef = A7ABD2DC1811BEEB00494DA5 /* auto_link.html */; }; @@ -578,6 +579,13 @@ remoteGlobalIDString = A7870C2E1817F6C000E39311; remoteInfo = "DTMarkdownParser (iOS)"; }; + A7870DD31817FFA700E39311 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A7BF250018112A3B0013D8D7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = A7BF25D3181138320013D8D7; + remoteInfo = "DTMarkdownParser (Mac)"; + }; A7BF25BD1811354B0013D8D7 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = A7BF258C1811352D0013D8D7 /* OCMockito.xcodeproj */; @@ -625,6 +633,16 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + A7870DD51817FFB700E39311 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + A7870DD61817FFCE00E39311 /* DTMarkdownParser.framework in CopyFiles */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -639,7 +657,7 @@ A7870C401817F6C000E39311 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; A7870C5B1817F73900E39311 /* DTMarkdownParser-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "DTMarkdownParser-Prefix.pch"; sourceTree = ""; }; A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UnitTests_iOS.octest; sourceTree = BUILT_PRODUCTS_DIR; }; - A7870D891817FDEC00E39311 /* Demo (Mac).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Demo (Mac).app"; sourceTree = BUILT_PRODUCTS_DIR; }; + A7870D891817FDEC00E39311 /* DTMarkdown Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DTMarkdown Demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; A7870D8C1817FDEC00E39311 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; A7870D8D1817FDEC00E39311 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; A7870D8E1817FDEC00E39311 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -1341,7 +1359,7 @@ A7BF25D4181138320013D8D7 /* DTMarkdownParser.framework */, A7870C2F1817F6C000E39311 /* libDTMarkdownParser_iOS.a */, A7870C601817F7BB00E39311 /* UnitTests_iOS.octest */, - A7870D891817FDEC00E39311 /* Demo (Mac).app */, + A7870D891817FDEC00E39311 /* DTMarkdown Demo.app */, ); name = Products; sourceTree = ""; @@ -1495,14 +1513,16 @@ A7870D851817FDEC00E39311 /* Sources */, A7870D861817FDEC00E39311 /* Frameworks */, A7870D871817FDEC00E39311 /* Resources */, + A7870DD51817FFB700E39311 /* CopyFiles */, ); buildRules = ( ); dependencies = ( + A7870DD41817FFA700E39311 /* PBXTargetDependency */, ); name = "Demo (Mac)"; productName = "Demo (Mac)"; - productReference = A7870D891817FDEC00E39311 /* Demo (Mac).app */; + productReference = A7870D891817FDEC00E39311 /* DTMarkdown Demo.app */; productType = "com.apple.product-type.application"; }; A7BF251C18112A8F0013D8D7 /* UnitTests (Mac) */ = { @@ -2241,6 +2261,11 @@ target = A7870C2E1817F6C000E39311 /* DTMarkdownParser (iOS) */; targetProxy = A7870C7A1817F89900E39311 /* PBXContainerItemProxy */; }; + A7870DD41817FFA700E39311 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = A7BF25D3181138320013D8D7 /* DTMarkdownParser (Mac) */; + targetProxy = A7870DD31817FFA700E39311 /* PBXContainerItemProxy */; + }; A7BF2606181150FC0013D8D7 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = A7BF25D3181138320013D8D7 /* DTMarkdownParser (Mac) */; @@ -2379,7 +2404,7 @@ ); INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.9; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "DTMarkdown Demo"; WRAPPER_EXTENSION = app; }; name = Debug; @@ -2393,7 +2418,7 @@ GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.9; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "DTMarkdown Demo"; WRAPPER_EXTENSION = app; }; name = Coverage; @@ -2407,7 +2432,7 @@ GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; MACOSX_DEPLOYMENT_TARGET = 10.9; - PRODUCT_NAME = "$(TARGET_NAME)"; + PRODUCT_NAME = "DTMarkdown Demo"; WRAPPER_EXTENSION = app; }; name = Release; From 39e9acc060ca6219d18f54062cb2b6671bddd91b Mon Sep 17 00:00:00 2001 From: Oliver Drobnik Date: Wed, 23 Oct 2013 15:11:07 +0200 Subject: [PATCH 26/26] set demo deploy target to 10.8 --- DTMarkdownParser.xcodeproj/project.pbxproj | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/DTMarkdownParser.xcodeproj/project.pbxproj b/DTMarkdownParser.xcodeproj/project.pbxproj index ad25f01..b951a9c 100644 --- a/DTMarkdownParser.xcodeproj/project.pbxproj +++ b/DTMarkdownParser.xcodeproj/project.pbxproj @@ -2403,7 +2403,6 @@ "$(inherited)", ); INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_NAME = "DTMarkdown Demo"; WRAPPER_EXTENSION = app; }; @@ -2417,7 +2416,6 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_NAME = "DTMarkdown Demo"; WRAPPER_EXTENSION = app; }; @@ -2431,7 +2429,6 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Demo/Mac/Demo-Prefix.pch"; INFOPLIST_FILE = "Demo/Mac/Demo-Info.plist"; - MACOSX_DEPLOYMENT_TARGET = 10.9; PRODUCT_NAME = "DTMarkdown Demo"; WRAPPER_EXTENSION = app; }; @@ -2697,6 +2694,7 @@ A7870C4F1817F6C000E39311 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; A7870C6F1817F7BB00E39311 /* Build configuration list for PBXNativeTarget "UnitTests (iOS)" */ = { isa = XCConfigurationList; @@ -2706,6 +2704,7 @@ A7870C721817F7BB00E39311 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; A7870DB71817FDED00E39311 /* Build configuration list for PBXNativeTarget "Demo (Mac)" */ = { isa = XCConfigurationList; @@ -2715,6 +2714,7 @@ A7870DBA1817FDED00E39311 /* Release */, ); defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; }; A7BF250318112A3B0013D8D7 /* Build configuration list for PBXProject "DTMarkdownParser" */ = { isa = XCConfigurationList;