HtmlFilter は、HTML 文字列と C1Document を相互に変換するための C1RichTextBox のコンポーネントです。また、C1HtmlDocument という HTML ドキュメントの中間表現と相互に変換することもできます。
C1HtmlDocument と C1Document の間で変換する際は、いくつかのイベントが発生するので、変換される各ノードをカスタマイズできます。以下のイベントがあります。
ConvertingHtmlNode: このイベントは、HTML ノードが変換される直前に発生します。イベントハンドラで処理済みのマークが付けられていると、HtmlFilter はそのノードが変換されたと見なし、処理をスキップします。
ConvertedHtmlNode: このイベントは、ノードが変換された後に発生します。このイベントは、変換結果に多少の変更を加える場合に使用できます。
ConvertingTextElement: このイベントは、C1TextElement が変換される直前に発生します。イベントハンドラで処理済みのマークが付けられていると、HtmlFilter はその要素が変換されたと見なし、処理をスキップします。
ConvertedTextElement: このイベントは、C1TextElement が変換された後に発生します。このイベントは、変換結果に多少の変更を加える場合に使用できます。
例として、C1.WPF.Imaging.4 または C1.Silverlight.Imaging.5 を使用して GIF イメージのサポートを追加している HtmlFilterCustomization サンプルを見てみます。このサンプルは、ConvertingHtmlNode イベントと ConvertingTextElement イベントの両方を使用します。これは ConvertingHtmlNode イベントハンドラです。
このイベントハンドラは最初に、e.HtmlNode を C1HtmlElement にキャストします。C1HtmlNode を継承する型は2つあります。C1HtmlElement は などの HTML 要素を表し、C1HtmlText はテキストノードを表します。
C1HtmlNode オブジェクトが C1HtmlElement にキャストされると、タグ名を調べて属性にアクセスできるようになります。そこで、要素が実際に IMG タグかどうかを確認し、SRC 属性を取得します。コードの残りの部分では、適切な要素を作成して e.Parent に追加しています。SRC 値は、エクスポートする際にアクセスできるように添付プロパティとして保存されます。
変換が完了すると、ハンドラは、HtmlFilter がこの C1HtmlNode を変換できないようにするために、e.Handled を True に設定します。
ConvertingTextElement イベントハンドラは、次のようになります。
これは、C1TextElement を C1HtmlElement に変換すること以外は、もう一方のハンドラとほとんど同じです。添付プロパティから SRC 値が復元され、その属性を使用して C1HtmlElement が作成されます。前と同様に、新しい要素が e.Parent に追加され、イベントは Handled としてマークされます。