2009年10月14日水曜日

属性付き文字列(NSAttributedString)からHTML文字列を作る

これを見つけたので参考にさせていただき,やってみた.(感謝!)
コード(HTMLからNSAttributedStringも作ってみた)
 NSString *input= @"<a href='/mail'><b>G</b>mail</a>";
NSAttributedString *as= [[NSAttributedString alloc] initWithHTML:[input dataUsingEncoding:NSASCIIStringEncoding]
baseURL:[NSURL URLWithString:@"http://www.google.jp/"]
documentAttributes:nil];
NSString *aTitle= @"Gmail";


NSArray *excluded= nil;
NSDictionary *attr= [NSDictionary dictionaryWithObjectsAndKeys:
NSHTMLTextDocumentType, NSDocumentTypeDocumentAttribute,
aTitle, NSTitleDocumentAttribute,
excluded, NSExcludedElementsDocumentAttribute,
[NSNumber numberWithInt:NSASCIIStringEncoding],
NSCharacterEncodingDocumentAttribute,
nil];
NSData *data= [as dataFromRange:NSMakeRange(0, [as length])
documentAttributes:attr
error:nil];
NSString* output= [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@", output);


結果1
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title>Gmail</title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.11">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Times; color: #0000ee}
span.s1 {text-decoration: underline}
</style>
</head>
<body>
<p class="p1"><a href="http://www.google.jp/mail"><b>G</b><span class="s1">mail</span></a></p>
</body>
</html>


参考のようにexcluded(NSArray)を用意してみる
 NSArray *excluded = [NSArray arrayWithObjects: @"doctype", @"html",  
@"head", @"body", @"xml", @"font", @"span", @"p", nil];

結果2
<a href="http://www.google.jp/mail"><b>G</b><u>mail</u></a>
styleタグが使えないとuタグがでてくるの?

uタグも除きたい
 NSArray *excluded = [NSArray arrayWithObjects: @"doctype", @"html",  
@"head", @"body", @"xml", @"font", @"span", @"p", @"u", nil];

結果3
<a href="http://www.google.jp/mail"><b>G</b>mail</a>


ちなみにUTF-8の時はNSUTF8StringEncodingを指定する.
ただしHTMLからNSAttributedStringを作るときは以下の形が必要らしい
 NSString *input= @"<a href='/mail'><b>じー</b>めいる</a>";
NSDictionary *option= [NSDictionary dictionaryWithObjectsAndKeys:
[NSURL URLWithString:@"http://www.google.jp"], NSBaseURLDocumentOption,
[NSNumber numberWithInt:NSUTF8StringEncoding], NSCharacterEncodingDocumentOption, nil];
NSAttributedString *as= [[NSAttributedString alloc] initWithHTML:[input dataUsingEncoding:NSUTF8StringEncoding]
options:option
documentAttributes:nil];


って感じ.

0 件のコメント: