1 #import "HTMLRenderer.h"
6 #define Log(fmt, ...) NSLog(fmt, ##__VA_ARGS__)
11 @implementation HTMLRenderer
12 + (NSAttributedString *)attributedStringWithURL:(NSURL *)url {
13 HTMLRenderer *htmlRenderer = [[HTMLRenderer alloc] init];
14 NSAttributedString *attributedString = [htmlRenderer attributedStringWithURL:url];
15 [htmlRenderer release];
16 return attributedString;
20 if((self = [super init]) == nil)
23 renderLock = [[NSConditionLock alloc] initWithCondition:0];
24 finishedRendering = 0;
25 renderWebView = [[WebView alloc] initWithFrame:NSMakeRect(0., 0., 2000., 100.) frameName:nil groupName:nil];
26 [renderWebView setFrameLoadDelegate:self];
31 - (NSAttributedString *)attributedStringWithURL:(NSURL *)url {
33 finishedRendering = 0;
34 [self renderHTMLFragment:url];
36 if(finishedRendering == 1)
37 return [(id <WebDocumentText>)[[[renderWebView mainFrame] frameView] documentView] attributedString];
42 - (void)renderHTMLFragment:(NSURL *)url {
43 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
45 [NSThread setThreadPriority:1.0];
48 [[renderWebView mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
50 while(!finishedRendering)
51 [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
53 [renderLock unlockWithCondition:1];
59 [renderWebView release];
63 - (void)webView:(WebView *)sender didFailLoadWithError:(NSError *)error forFrame:(WebFrame *)frame {
64 finishedRendering = -1;
67 - (void)webView:(WebView *)sender didFailProvisionalLoadWithError:(NSError *)error forFrame:(WebFrame *)frame {
68 finishedRendering = -1;
71 - (void)webView:(WebView *) sender didFinishLoadForFrame:(WebFrame *) frame {
72 finishedRendering = 1;