S-JIS[2009-01-31/2009-02-21] 変更履歴
HtHtmlLexerを使った、HTMLファイルを操作(検索・置換)するAntタスクです。 (アーカイブ→HtHtmlLexerのhtlexer.jarの中に含まれている)
|
「<meta http-equiv="Content-Type" content="〜">」というタグを持つHTMLファイルをUTF-8に変換する例です。
<?xml version="1.0" encoding="Shift_JIS"?> <project name="HtHtmlLexer sample" basedir="."> <typedef resource="htlex.typedef.properties" classpath="htlexer.jar" /> <property name="html" location="C:\temp\lexer\from" /> <property name="todir" location="C:\temp\lexer\to" /> <target name="change_utf8"> <htlex todir="${todir}"> <fileset dir="${html}"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" outputEncoding="UTF-8" logWriteFile="info"> <ctag name="meta"> <cattr name="http-equiv" value="Content-Type" /> <newtag> <repattr name="content" newValue="text/html;charset=utf-8" /> </newtag> </ctag> </htconv> </htlex> </target> </project>
まず、htlex用タグを使う為に、typedefによってタグ名を定義する必要があります。
htlexer.jarはJDK1.6でコンパイルしている為、JRE1.6以降でないと動きません。(アーカイブ→htlexer.jar)
なお、動作確認はAnt1.7で行っています。
htlexタグにはファイル出力先のディレクトリーを指定します。省略時は読み込んだファイルに上書きします。
読み込むファイルはfilesetによって指定します。
htconvタグには文字コード(エンコーディング)・ログ出力の設定を行います。
ctagタグには、条件判断・変換を行うタグを指定します。
cattrタグには、条件判断を行う属性を指定します。
これらの条件に一致した場合、newtagタグによる置換が行われます。
newtagタグは、置換する値を指定する印です。
repattrタグは、属性を置換する指定です。
上記の例では、ctagタグにname="meta"とあるので、タグ名が「meta」であるタグが判断対象(および変更対象)となります。
そしてcattrタグにname="http-equiv"とvalue="Content-Type"の指定があるので、「http-equiv="Content-Type"」という属性を持っている場合だけ変更対象となります。
この条件判断はデフォルトでは大文字小文字を無視します。
条件が合致した場合、newtagタグによる変換を行います。
repattrタグにname="content"とあるので、属性名がcontent、すなわち「content="〜"」という属性が実際に置換される属性です。
newValueの指定があるので、contentの属性値がnewValueの値に置き換わります。
htconvデータタイプが実際のファイル出力を行います。デフォルトでは、(newtagタグ等によって)何らかの変更が無い場合は出力しません。
上記の例ではoutputEncodingを指定しているので文字コードを変換して出力しますが、
「<meta http-equiv="Content-Type" content="〜">」というタグが書かれていなかったHTMLファイルは
置換が行われないので、出力対象になりません。
forceをtrueにすれば、変更有無に関わらず常に出力されます。
HtHtmlLexerを使った、HTMLファイルを操作(検索・置換)するタスクです。
(対象ファイル一覧の生成を担当しています)
属性 | 説明 | 必須 |
---|---|---|
toDir | 出力先ディレクトリー。 | No; 省略した場合は読み込んだファイルに上書きする |
backupDir | バックアップ先ディレクトリー。[2009-02-08] 指定すると、変更前にファイルをコピーする。 (toDirと同時に指定するのはあまり意味が無い) |
No |
HTMLファイルの変換方法を指定するデータタイプです。
(実際のファイル読み込み・HtHtmlLexer呼び出し・ファイル書き込みを行います)
属性 | 説明 | 必須 |
---|---|---|
encoding | 入力ファイルの文字コード。 (HTMLファイルの中に指定されているエンコードは考慮されない) |
No; 省略した場合はJavaVMのデフォルトの文字コード |
outputEncoding | 出力ファイルの文字コード。 | No; 省略した場合はencodingと同じ |
useParser | trueの場合、HtHtmlParserを使用して構文解析を行う。[2009-02-21] HtHtmlParserを使用するオプションを指定すると、当属性は自動的にtrueになる為、明示的に指定する必要は無い。 |
No; デフォルトはfalse ただし、他のオプションによっては、自動的にtrueになる |
force | trueの場合、変更が無くてもファイル出力する。 | No; デフォルトはfalse |
noWrite | trueの場合、ファイル出力は行わない。(変更時の出力もバックアップも)[2009-02-08] forceと同時にtrueにした場合も、ファイル出力されない。 (ただし、logWriteFileの指定によるファイル名出力は行われる) |
No; デフォルトはfalse |
logReadFile | ログレベルを指定する。 指定すると、入力ファイル名をログ出力する。 |
No; デフォルトではログ出力しない |
logMatch | ログレベルを指定する。 指定すると、条件にマッチした場合にファイル名とマッチ箇所をログ出力する。 |
|
logUnmatch | ログレベルを指定する。 指定すると、条件に1つもマッチしなかった場合にファイル名をログ出力する。 |
|
logConvert | ログレベルを指定する。 指定すると、変換を行った場合に変換内容をログ出力する。 |
|
logWriteFile | ログレベルを指定する。 指定すると、出力ファイル名をログ出力する。 |
|
dumpParseNotFix | ログレベルを指定する。[2009-02-21] 指定すると、HtHtmlParserで解析したが未確定なタグを出力する。 (→使用例) (指定すると、useParser属性が自動的にtrueになる) |
タグの検索条件を指定するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
name | マッチ条件とするタグ名。 | No |
nameMatch | タグ名のマッチング方法を指定する。 | No; デフォルトは大文字小文字を無視して比較 |
tago | マッチ条件とするタグ開き。 | No |
tagc | マッチ条件とするタグ閉じ。 | No |
pair | 開始タグ・終了タグのペアの有無を条件とする。[2009-02-21] →使用例 |
No |
マッチ条件を一つも指定しない場合は、タグに関しては常にマッチした扱いになります。(全ての開始タグ・終了タグにマッチする)
name以外のマッチ条件は、equals(完全一致)で比較されます。
→ctagの使用例
cattr(およびand,or,not)を複数書いた場合は、andタグで囲まれているものとして扱われます。
→and条件の使用例
→not条件の使用例
属性の検索条件を指定するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
name | マッチ条件とする属性名。 | No |
nameMatch | 属性名のマッチング方法を指定する。 | No; デフォルトは大文字小文字を無視して比較 |
let | マッチ条件とする代入記号。 | No |
value | マッチ条件とする属性値。 | No |
valueMatch | 属性値のマッチング方法を指定する。 | No; デフォルトは大文字小文字を無視して比較 |
quote | マッチ条件とする(属性値を囲む)クォーテーション。 | No |
マッチ条件を一つも指定しない場合はエラーとなります。
name,value以外のマッチ条件は、equals(完全一致)で比較されます。
→cattrの使用例
なし。
タグの変換内容を指定するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
newName | 新しいタグ名。 | No |
newNameCase | タグ名のケース変換方法を指定する。 | No |
newNamePair | trueの場合、タグ名を変更する際に、ペアとなるタグも変更する。[2009-02-21] (trueにすると、useParser属性が自動的にtrueになる) →使用例 |
No; デフォルトはfalse |
newTago | 新しいタグ開き。 | No |
newTagc | 新しいタグ閉じ。 | No |
replenish | ペアとなるタグが無い場合に、補完する。[2009-02-21] (trueにすると、useParser属性が自動的にtrueになる) →使用例 |
No; デフォルトはfalse |
変換値・変換方法を一つも指定しない場合は、タグに関しては何も変更しません。
(newNameCase以外の)変換値は、その値全体を上書きします。
→newtagの使用例
属性を追加するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
newName | 新しい属性名。 | Yes |
newNameCase | 属性名のケース変換方法を指定する。 | No; デフォルトは変換しない |
newLet | 新しい代入記号。 | No; デフォルトは、newValueが指定されている場合は「=」、それ以外の場合は無し |
newQuote | 新しい(属性値を囲む)クォーテーション。 | No; デフォルトは、newValueが指定されている場合は「"」、それ以外の場合は無し |
newValue | 新しい属性値。 | No |
newValueCase | 属性値のケース変換方法を指定する。 | No; デフォルトは変換しない |
newValueHtmlEscape | 属性値のHTMLエスケープ方法を指定する。 | No; デフォルトはHTMLエスケープしない |
preSkip | 属性の前に挿入する空白を指定する。 | No; デフォルトは「 」(半角スペース1個) |
dup | 属性名が既に存在している場合の動作を指定する。 | No; デフォルトは既存の属性を更新 |
なし。
属性を置換するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
name nameMatch let value valueMatch quote |
置換を行う対象となる属性の条件を指定する。 内容はcattrと同様。 |
いずれかのマッチ条件は必須 |
newName | 新しい属性名。 | Yes |
newNameOperation | 属性名の置換方法を指定する。 | No; デフォルトは単純な上書き |
newNameCase | 属性名のケース変換方法を指定する。 | No; デフォルトは変換しない |
newLet | 新しい代入記号。 | No |
newQuote | 新しい(属性値を囲む)クォーテーション。 | No |
newValue | 新しい属性値。 | No |
newValueOperation | 属性値の置換方法を指定する。 | No; デフォルトは単純な上書き |
newValueCase | 属性値のケース変換方法を指定する。 | No; デフォルトは変換しない |
newValueHtmlEscape | 属性値のHTMLエスケープ方法を指定する。 | No; デフォルトはHTMLエスケープしない |
dup | 属性名を変更する際に新しい名前が既に存在していた場合の動作を指定する。 | No; デフォルトは、既存の属性を削除して指定された置換操作を行う |
なし。
属性を削除するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
name nameMatch let value valueMatch quote |
削除を行う対象となる属性の条件を指定する。 内容はcattrと同様。 |
いずれかのマッチ条件は必須 |
なし。
テキストの検索条件・置換内容を指定するデータタイプです。
属性 | 説明 | 必須 |
---|---|---|
text | マッチ条件とする文字列。 | text属性またはtext要素が必須 |
textMatch | 文字列のマッチング方法を指定する。 | No; デフォルトは完全一致 |
textType | 検索対象テキストの種類を指定する。 | No; デフォルトはscript以外のテキスト |
lines | trueの場合、複数行をまとめて1つの文字列として扱う。 falseの場合、一行ずつマッチング(および置換)を行う。 |
No; デフォルトはfalse |
newText | 新しい文字列。 | No |
newTextOperation | テキストの置換方法を指定する。 | No; デフォルトは単純な上書き |
newText属性またはnewtext要素が指定された場合は、マッチしたテキストに対して置換を行います。
変更前に内容確認(ログ出力)だけ行う例です。[2009-02-08]
<target name="backup"> <htlex> <fileset dir="C:\temp\lexer\from"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logConvert="info" logWriteFile="warning" noWrite="true"> <ctag name="b"> <newtag newName="strong" /> </ctag> <ctag name="i"> <newtag newName="em" /> </ctag> </htconv> </htlex> </target>
変更前の内容をディレクトリー(名前に日付時刻を使用)にバックアップしつつ変換する例です。[2009-02-08]
(変換自体は読み込んだファイルに上書きされます)
<target name="backup"> <tstamp> <format property="bak.dir" pattern="yyyyMMdd_HHmmss" /> </tstamp> <htlex backupdir="C:\temp\lexer\bak\${bak.dir}"> <fileset dir="C:\temp\lexer\from"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" logConvert="info" logWriteFile="warning"> <ctag name="b"> <newtag newName="strong" /> </ctag> <ctag name="i"> <newtag newName="em" /> </ctag> </htconv> </htlex> </target>
HtHtmlParserを使って変換を出来るようになりました。[2009-02-21]
HtHtmlLexerのみの場合、タグ単独でしか条件を指定できませんが、HtHtmlParserでは開始タグと終了タグのペアを作るので、ペアに対して条件指定できます。
が、HtHtmlParserは万能には程遠いので(汗)、まずはHtHtmlParserで解釈し切れなかったタグを表示してみます。(解釈に失敗する可能性が一番高いのは、タグのペアがきちんと対応付けられていない場合だと思われるので)
<target name="parse dumpNotFix"> <htlex> <fileset dir="C:\temp\lexer\from"> <include name="**/*.html" /> </fileset> <htconv encoding="MS932" dumpParseNotFix="warn" /> </htlex> </target>
HtHtmlParserの機能を使用する為には、useParser属性をtrueにする必要があります。
が、dumpParseNotFixの様にHtHtmlParserの機能を使用するオプションを指定すると、自動的にuseParser属性はtrueになります。
なお、dumpParseNotFixの場合、HtElementUtil#dumpNotFix()の結果を出力しているだけです。