Skip to content

Commit

Permalink
Added scene number parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
HendrikNoeller committed May 11, 2016
1 parent a7b215f commit 872a5a5
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 1 deletion.
Binary file not shown.
1 change: 1 addition & 0 deletions Writer/ContinousFountainParser.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
- (NSString*)stringAtLine:(NSUInteger)line;
- (LineType)typeAtLine:(NSUInteger)line;
- (NSUInteger)positionAtLine:(NSUInteger)line;
- (NSString*)sceneNumberAtLine:(NSUInteger)line;

//Convenience Methods for Outlineview data
- (BOOL)getAndResetChangeInOutline;
Expand Down
38 changes: 38 additions & 0 deletions Writer/ContinousFountainParser.m
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,15 @@ - (void)parseTypeAndFormattingForLine:(Line*)line atIndex:(NSUInteger)index
and:NOTE_CLOSE_PATTERN
withLength:NOTE_PATTERN_LENGTH
excludingIndices:nil];

if (line.type == heading) {
NSRange sceneNumberRange = [self sceneNumberForChars:charArray ofLength:length];
if (sceneNumberRange.length == 0) {
line.sceneNumber = nil;
} else {
line.sceneNumber = [line.string substringWithRange:sceneNumberRange];
}
}
}

- (LineType)parseLineType:(Line*)line atIndex:(NSUInteger)index
Expand Down Expand Up @@ -591,6 +600,25 @@ - (NSMutableIndexSet*)rangesOfOmitChars:(unichar*)string ofLength:(NSUInteger)le
return indexSet;
}

- (NSRange)sceneNumberForChars:(unichar*)string ofLength:(NSUInteger)length
{
NSUInteger backNumberIndex = NSNotFound;
for(NSInteger i = length - 1; i >= 0; i--) {
char c = string[i];
if (c == ' ') continue;
if (backNumberIndex == NSNotFound) {
if (c == '#') backNumberIndex = i;
else break;
} else {
if (c == '#') {
return NSMakeRange(i+1, backNumberIndex-i-1);
}
}
}
return NSMakeRange(0, 0);
}


#pragma mark - Data access

- (NSString*)stringAtLine:(NSUInteger)line
Expand Down Expand Up @@ -623,6 +651,16 @@ - (NSUInteger)positionAtLine:(NSUInteger)line
}
}

- (NSString*)sceneNumberAtLine:(NSUInteger)line
{
if (line >= [self.lines count]) {
return nil;
} else {
Line* l = self.lines[line];
return l.sceneNumber;
}
}


#pragma mark - Outline Dat

Expand Down
2 changes: 2 additions & 0 deletions Writer/Line.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ typedef enum : NSUInteger {
@property (strong, nonatomic) NSString* string;
@property NSUInteger position;
@property NSUInteger numberOfPreceedingFormattingCharacters;
@property NSString* sceneNumber;

@property NSMutableIndexSet* boldRanges;
@property NSMutableIndexSet* italicRanges;
@property NSMutableIndexSet* underlinedRanges;
Expand Down
11 changes: 10 additions & 1 deletion WriterTests/WriterParserTests.m
Original file line number Diff line number Diff line change
Expand Up @@ -64,9 +64,11 @@ - (void)testInitialParse
XCTAssertEqual([parser typeAtLine:i], titlePageUnknown); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertEqualObjects([parser sceneNumberAtLine:i-1], @"1");
XCTAssertEqual([parser typeAtLine:i], action); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
XCTAssertEqual([parser typeAtLine:i], action); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], character); i++;
Expand All @@ -92,6 +94,7 @@ - (void)testInitialParse
XCTAssertEqual([parser typeAtLine:i], action); i++;
XCTAssertEqual([parser typeAtLine:i], transition); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
XCTAssertEqual([parser typeAtLine:i], action); i++;
XCTAssertEqual([parser typeAtLine:i], lyrics); i++;
XCTAssertEqual([parser typeAtLine:i], transition); i++;
Expand All @@ -108,12 +111,16 @@ - (void)testInitialParse
XCTAssertEqual([parser typeAtLine:i], dialogue); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
}

- (void)testInsertions
Expand Down Expand Up @@ -232,9 +239,11 @@ - (void)testInsertions
XCTAssertEqual([parser typeAtLine:i], titlePageUnknown); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertEqualObjects([parser sceneNumberAtLine:i-1], @"1");
XCTAssertEqual([parser typeAtLine:i], action); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], heading); i++;
XCTAssertNil([parser sceneNumberAtLine:i-1]);
XCTAssertEqual([parser typeAtLine:i], action); i++;
XCTAssertEqual([parser typeAtLine:i], empty); i++;
XCTAssertEqual([parser typeAtLine:i], character); i++;
Expand Down Expand Up @@ -486,7 +495,7 @@ - (void)testOmmitParsing
@"\ttest@abc.\nde"
@"Key: value\n"
@"\n"
@"INT. DAY - LIVING ROOM\n"
@"INT. DAY - LIVING ROOM #1# \n"
@"EXT. DAY - LIVING ROOM\n"
@"\n"
@"EXT. DAY - LIVING ROOM\n"
Expand Down

0 comments on commit 872a5a5

Please sign in to comment.