Ubiquityのマクロフィルタの作成
便利なツールの一例として、Webページ上に特定のパターンマッチングがあるかどうかを分析し、一致したものを代わりのコンテンツに置き換える正規表現フィルタを考えてみましょう。例えば、あなたが米国大統領選挙の経過をとても熱心に追いかけているとします。大統領候補者の名前がWebページに表示されたときに、その名前が強調表示されるようにしたら便利ですね。ついでに、外部サイトのタイトルやリンクも一緒に強調表示されるようにしたいものです。
これを実現するには、Ubiquityのmacroコマンドを作成します。このコマンドは、XMLベースの辞書ファイルのURLを引数として受け取り、そのファイルをダウンロードして構文解析し、一連の正規表現(regex)とそれに対応する置換テキストを作成します。その後、各フィルタをテキストの選択範囲またはページ全体に適用し、regexを適切な置換テキストに置き換えます。
まず、Mozilla LabsからUbiquityのアドオンプロトタイプを入手する必要があります。これは作業用プロトタイプです。本稼働で使用できるようになるまでには、実行すべき作業がかなり残っているので、Ubiquityコンポーネントをアプリケーションに導入する計画はまだ立てないでください。
アドオンをインストールしてFirefoxをリブートしたら、「chrome://ubiquity/content/editor.html」にある組み込みエディタを使用できます。「chrome://」プロトコルは、このエディタが外部サイトからロードされているものではなく、ブラウザそのものに組み込まれていることを示し、これによりオンライン状態でない場合でも(ほとんどの)アプリケーションを作成することが可能となります。新しいスクリプトを追加するには、このエディタにそれらのスクリプトを入力するだけです。コンテンツは自動的に保存されます。
これは優れたAJAXベースの機能で、自動保存を無効にしてSaveボタンをセットアップするオプションも用意されていますが、作業内容を誤って消去したり、暗黙的な自動保存に悪影響を与えるおそれのある不完全な状態でデータを保存したりする可能性があります。
Ubiquityのコードを見る前に、XMLベースの「辞書」ファイル(リスト1)について説明します。
<?xml version="1.0" encoding="UTF-8"?>
<dictionary>
<entry global="yes" casesensitive="yes">
<term>Obama</term>
<expr><![CDATA[<span style="color:skyblue;font-style:italic;">Obama</span>]]></expr>
</entry>
<entry global="yes" casesensitive="yes">
<term>McCain</term>
<expr><![CDATA[<span style="color:red;font-style:italic;">McCain</span>]]></expr>
</entry>
<entry global="yes" casesensitive="yes">
<term>((Barack.*?)?Obama|(John.*?)?McCain)</term>
<expr><![CDATA[<span title="Candidate for President" <br />style="border:dotted 1px;">$1</span>]]></expr>
</entry>
<entry global="yes" casesensitive="yes">
<term>((Jo.*?)?Biden|(Sarah.*?)?Palin)</term>
<expr><![CDATA[<span title="Candidate for Vice President" <br />style="border:dotted 1px;">$1</span>]]></expr>
</entry>
</dictionary>
この辞書は複数の項目に分かれ、各項目には関連付けられた用語(一致させる正規表現パターン)と、置換テキストを含む対応する式(<expr>)があります。ほとんどの場合、テキストはHTML置換コンテンツを保持するCDATAブロックでサポートされます。一致させる用語パターンにHTMLコンテンツまたはXMLコンテンツが含まれている場合は、<term>要素そのものの中で<![CDATA[ ]]>構成体を使用できます。もちろん、<term>または<expr>ノードのテキストが解決されるときに区切り文字は表示されません。
さらに、各項目には次の2つの属性があります。
global
この属性は、選択範囲全体で用語パターンを置き換えるか(通常はこのケース)、または最初に出現したときのみ用語を置き換えるかを決める場合に使用します。casesensitive
この属性は、用語の大文字/小文字が一致対象の項目と同じかどうかに関係なく、用語パターンの一致を行う場合に使用します。これらの属性の値は、yesまたはnoです。
このファイルをWeb上に保存し(ローカルに保存することもできます)、URLを記録します(この場合はhttp://localhost:8080/exist/rest//db/sandbox/dictionary.xml)。これを特定のディレクトリで配布する場合は、デフォルトのマクロ操作を実行するためにdefaultURLプロパティを設定します。
