S-JIS[2009-01-31/2009-02-21] 変更履歴

htlexタスク

HtHtmlLexerを使った、HTMLファイルを操作(検索・置換)するAntタスクです。 (アーカイブ→HtHtmlLexerのhtlexer.jarの中に含まれている)


使用方法

「<meta http-equiv="Content-Type" content="〜">」というタグを持つHTMLファイルをUTF-8に変換する例です。

build.xml:

<?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にすれば、変更有無に関わらず常に出力されます。


htlexの説明

HtHtmlLexerを使った、HTMLファイルを操作(検索・置換)するタスクです。
(対象ファイル一覧の生成を担当しています)

パラメータ

属性 説明 必須
toDir 出力先ディレクトリー。 No; 省略した場合は読み込んだファイルに上書きする
backupDir バックアップ先ディレクトリー。[2009-02-08]
指定すると、変更前にファイルをコピーする。
(toDirと同時に指定するのはあまり意味が無い)
No

ネストする要素として指定されるパラメータ


htconvの説明

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になる)

ネストする要素として指定されるパラメータ


ctagの説明

タグの検索条件を指定するデータタイプです。

パラメータ

属性 説明 必須
name マッチ条件とするタグ名。 No
nameMatch タグ名のマッチング方法を指定する。 No; デフォルトは大文字小文字を無視して比較
tago マッチ条件とするタグ開き。 No
tagc マッチ条件とするタグ閉じ。 No
pair 開始タグ・終了タグのペアの有無を条件とする。[2009-02-21]
→使用例
No

マッチ条件を一つも指定しない場合は、タグに関しては常にマッチした扱いになります。(全ての開始タグ・終了タグにマッチする)
name以外のマッチ条件は、equals(完全一致)で比較されます。
→ctagの使用例

ネストする要素として指定されるパラメータ

cattr(およびand,or,not)を複数書いた場合は、andタグで囲まれているものとして扱われます。
→and条件の使用例
→not条件の使用例


cattrの説明

属性の検索条件を指定するデータタイプです。

パラメータ

属性 説明 必須
name マッチ条件とする属性名。 No
nameMatch 属性名のマッチング方法を指定する。 No; デフォルトは大文字小文字を無視して比較
let マッチ条件とする代入記号。 No
value マッチ条件とする属性値。 No
valueMatch 属性値のマッチング方法を指定する。 No; デフォルトは大文字小文字を無視して比較
quote マッチ条件とする(属性値を囲む)クォーテーション。 No

マッチ条件を一つも指定しない場合はエラーとなります。
name,value以外のマッチ条件は、equals(完全一致)で比較されます。
→cattrの使用例

ネストする要素として指定されるパラメータ

なし。


newtagの説明

タグの変換内容を指定するデータタイプです。

パラメータ

属性 説明 必須
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の使用例

ネストする要素として指定されるパラメータ


addattrの説明

属性を追加するデータタイプです。

パラメータ

属性 説明 必須
newName 新しい属性名。 Yes
newNameCase 属性名のケース変換方法を指定する。 No; デフォルトは変換しない
newLet 新しい代入記号。 No; デフォルトは、newValueが指定されている場合は「=」、それ以外の場合は無し
newQuote 新しい(属性値を囲む)クォーテーション。 No; デフォルトは、newValueが指定されている場合は「"」、それ以外の場合は無し
newValue 新しい属性値。 No
newValueCase 属性値のケース変換方法を指定する。 No; デフォルトは変換しない
newValueHtmlEscape 属性値のHTMLエスケープ方法を指定する。 No; デフォルトはHTMLエスケープしない
preSkip 属性の前に挿入する空白を指定する。 No; デフォルトは「 」(半角スペース1個)
dup 属性名が既に存在している場合の動作を指定する。 No; デフォルトは既存の属性を更新

→addattrの使用例

ネストする要素として指定されるパラメータ

なし。


repattrの説明

属性を置換するデータタイプです。

パラメータ

属性 説明 必須
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; デフォルトは、既存の属性を削除して指定された置換操作を行う

→repattrの使用例

ネストする要素として指定されるパラメータ

なし。


delattrの説明

属性を削除するデータタイプです。

パラメータ

属性 説明 必須
name
nameMatch
let
value
valueMatch
quote
削除を行う対象となる属性の条件を指定する。
内容はcattrと同様。
いずれかのマッチ条件は必須

→delattrの使用例

ネストする要素として指定されるパラメータ

なし。


ctextの説明

テキストの検索条件・置換内容を指定するデータタイプです。

パラメータ

属性 説明 必須
text マッチ条件とする文字列。 text属性またはtext要素が必須
textMatch 文字列のマッチング方法を指定する。 No; デフォルトは完全一致
textType 検索対象テキストの種類を指定する。 No; デフォルトはscript以外のテキスト
lines trueの場合、複数行をまとめて1つの文字列として扱う。
falseの場合、一行ずつマッチング(および置換)を行う。
No; デフォルトはfalse
newText 新しい文字列。 No
newTextOperation テキストの置換方法を指定する。 No; デフォルトは単純な上書き

→ctextの使用例

ネストする要素として指定されるパラメータ

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の例

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()の結果を出力しているだけです。


自作Antタスクへ戻る / 自作ソフトへ戻る / 技術メモへ行く / 独自タスクの作り方へ行く
メールの送信先:ひしだま