*

ENMLからHTMLへの変換

公開日: : 最終更新日:2014/04/02 Tips, ライブラリ解説 , ,

最近EvernoteAPIをいじっているので、コレに関するノウハウをとりあえず断片的に引っかかったところを掲載していきたいと思います。
余裕があれば最初から導入法を書きたいと思います。

EvernoteのiOS用APIには、Evernoteのノート記述用のマークアップ記法(ENML)で書かれたノートをHTMLに変換するメソッドとして

- (void)convertENMLToHTML:(NSString *)enmlContent
            withResources:(NSArray *)resources
          completionBlock:
              (void (^__strong)(NSString *__strong, NSError *__strong))block;

というメソッドがあります。HTMLに変換するとUIWebViewにそのまま流して表示できるので重宝します。
ところがどうも文字の色付け、アンダーライン等が反映されないので調べてみたところ、ENMLではスタイルとしてCSSの書式で指定されている要素が変換の過程でごっそり抜け落ちていることが判明しました。

どうやらENMLのタグを変換はするものの、タグ内のスタイルを拾うという処理が記述されてないようです。
今のところ、対策はENMLUtility.mに手を入れる(ソースコードのライセンス表記はMITライセンスのようです)か、ENMLUtility.mをベースに変換ロジックをフルスクラッチするしかないようです。

修正するメソッドはNSXMLParserDelegateのメソッド

- (void) parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
   namespaceURI:(NSString *)namespaceURI
  qualifiedName:(NSString *)qName 
     attributes:(NSDictionary *)attributeDict

で、メソッドの末尾部分に以下のようにコードを追加すれば、一応対応はできるようです(完璧かどうか厳密なテストはしていませんので、自己責任でお願いします)。

(略)
        [self setShouldIgnoreNextEndElement:YES];
        [self writeResource:foundResource withAttributes:scrubbedAttributes];
    }
    // --- ここから追加
    else if([attributeDict valueForKey:@"style"]){
        // --- style属性を持っている
        NSMutableDictionary* dic = [[NSMutableDictionary alloc] init];
        [dic setObject:[attributeDict valueForKey:@"style"] forKey:@"style"];
        [self.htmlWriter startElement:elementName attributes:dic];
    }
    // --- ここまで追加
    else {
        [self.htmlWriter startElement:elementName];
    }

}

[iOS開発者へおすすめの本]

関連記事

UITableViewのセクションヘッダをStoryboardで作る時の参考

UITableViewのセクションヘッダをカスタムして作る際に、セルと同様にプロトタイピングするため

記事を読む

Xcode8で余計なログを抑制する

Xcode8に更新してから、妙にログが増えたので、NSLogで明示したのと実行時エラー以外のログを吐

記事を読む

Size ClassとUIViewController.view

タイトルの件でちょっとハマったことがある上に、特に日本語情報もStackOverflowからも情報が

記事を読む

UILabelの改行をInterfaceBuilderから入力する

UILabelの行数は任意に設定できて、「0」を指定すると行数を限定しないで(UILabelのbou

記事を読む

iPad用storyboard⇔iPhone用Storyboardへの変換

iPad用アプリとしてiPad用前提のstoryboardから、iPhone対応にするにあたり、si

記事を読む

HTMLParserを修正する

HTMLスクレイピングしてる時に役立つライブラリであるObjective-C-HMTL-Parser

記事を読む

iOS6時代のアプリのiOS7への対応

やや古い情報になるが、iOS7対応に関して自分がやったことの覚え書き。いろんな所から拾って来た情

記事を読む

ソースコードからStoryboardにアクセスする

複数のStoryboardを利用して、自分以外のStoryboardに遷移させるような展開をしたい場

記事を読む

iOS7でカメラ撮影時のステータスバーを消す

UIImagePickerControllerをカメラモードで表示するとステータスバーがカメラの一番

記事を読む

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテされてないなぁと感じたので、新

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑