/
CSRTFTextParserDelegate.m
85 lines (74 loc) · 2.18 KB
/
CSRTFTextParserDelegate.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//
// RTFTextParserDelegate.m
// TabBarApp
//
// Created by Marcin Maciukiewicz on 08/05/2010.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "CSRTFTextParserDelegate.h"
#import "CSRenderingCommand.h"
#import <NSMutableArray+StackAdditions.h>
@implementation CSRTFTextParserDelegate
@synthesize _commands;
@synthesize _tagStack;
-(id)init {
if((self=[super init])){
self._commands=[[NSMutableArray alloc] init];
self._tagStack=[[CSStack alloc] init];
}
return self;
}
-(void)dealloc {
[_commands release];
[super dealloc];
}
-(NSArray*)createRenderingCommands {
NSArray *result=[[NSArray alloc] initWithArray:_commands];
return result;
}
#pragma mark -
- (void)parserDidStartDocument:(NSXMLParser *)parser {
// NSLog(@"parserDidStartDocument");
// setup regular font
// SetupFontCommand *cmd=[[SetupFontCommand alloc] initWithTagName:@"@p"];
// [_commands addObject:cmd];
// [cmd release];
}
- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qualifiedName
attributes:(NSDictionary *)attributeDict {
CSRenderingCommand *cmd;
// NSLog(@"didStartElement %@",elementName);
[_tagStack push:elementName];
if([elementName isEqualToString:@"br"]){
// break line
cmd=[[BreakLineCommand alloc] init];
} else {
cmd=[[SetupFontCommand alloc] initWithTagName:elementName];
}
[_commands addObject:cmd];
[cmd release];
}
- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI
qualifiedName:(NSString *)qName {
// NSLog(@"didEndElement %@",elementName);
[_tagStack pop];
if(![elementName isEqualToString:@"br"]){
NSString *previousElementName=[_tagStack peek];
// NSLog(@"previous element: %@",previousElementName);
// setup regular font
SetupFontCommand *cmd=[[SetupFontCommand alloc] initWithTagName:previousElementName];
[_commands addObject:cmd];
[cmd release];
}
}
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
// NSLog(@"foundCharacters");
// print text
ShowTextCommand *cmd=[[ShowTextCommand alloc] initWithText:string];
[_commands addObject:cmd];
[cmd release];
}
@end