このエントリーをはてなブックマークに追加
スポンサーリンク

mkprintf

mkprintfとは

テキスト文書、特にHTMLで書かれた文書を、C系の言語(C、Perl、PHP)のprintf文に変換します。また、%、¥、”等のエスケープが必要な文字は、自動的にエスケープされます。

HTML文書では先頭のスペースや空行は関係ないので、行の先頭のスペースやタブは自動的にカットされます。また、空行は出力から除外されます。ただし、オプションでそれらの処理を制御することもできます。

作成方法

まず、下記リンクをクリックして、ソース一式をダウンロードします。
mkprintf-1.02.tar.gzをダウンロード
これを、適当なコンパイル用のディレクトリにアップします。

tar xvzf mkprintf-1.02.tar.gz
cd mkprintf-1.02
make
sudo make install

コンパイルが通れば、実行ファイルが/usr/local/binにコピーされます。外部ライブラリは使ってないので、configureスクリプトは入ってません。お使いの環境でコンパイルが通らない場合は、Makefileを書き換えてみてください。

このサイトで使っているサーバー(CentOS4.7)では正常にコンパイルする事ができましたが、全てのLinuxでコンパイルできるとは限りません。Linuxのディストリビューションによってはエラーが出てしまう事も考えられますが、その際は申し訳ありませんが、エラーの内容をチェックしてソースやMakefileの修正をお願いします。

使い方

ソースが正しくコンパイルされていれば、実行ファイルmkprintfというファイルが作られていると思います。このファイルを実行します。
書式

mkprintf [ファイル名] [オプション] [--help]
ファイル名・・・入力ファイル名を指定します。指定しなかった時は、標準入力になります。

 オプション
-o ファイル名 出力ファイルを指定します。指定しなかった時は、標準出力になります。-o の後にスペースで区切って、出力ファイル名を入れてください。
-notrim 先頭のタブやスペースをカットせずにそのまま出力します。
-nullout 空行であっても、そのまま出力します。
--help ヘルプを出力します。
 例
mkprintf test.html
mkprintf < test.html
test.htmlというファイルを読み込んで、printf文にして出力します。上と下は同じ動作をしますが、下は標準入力からリダイレクトしています。
mkprintf test.html -o test.php
mkprintf test.html > test.php
test.htmlというファイルを読み込んで、test.phpというファイルに出力しています。上と下は同じ動作をしますが、下は標準出力からリダイレクトしています。
mkprintf test.html -notrim
test.htmlというファイルをprintf文にしますが、先頭のタブやスペースもそのまま出力します。
mkprintf test.html -nullout
test.htmlというファイルをprintf文にしますが、空行もそのまま出力します。

制限事項

・1行の長さの制約
1行の長さは4096バイトまでです。それ以上長い文字列は4096バイト目でカットされます。しかし、HTMLでそんなに1行が長い必要はないと思いますので、問題はないと思います。

・シフトJISコードを使う場合の注意
シフトJISコードで漢字を使う場合、「予」や「表」のような2バイト目にエスケープすべきコードが含まれている事があります。その場合、自動的に後ろに「¥」のコードが追加されます。

ただし、Perlのバージョンによっては半角の@マークもエスケープしなければならない場合もあります。全角スペースが該当します。その場合でも、@はエスケープされません。このように、C系言語でシフトJISコードを使うと、色々問題が発生する場合が多いため、C系言語ではできる限りEUCコードを使う方がいいと思います。

・改行コードについて
改行コードは、[\r]または[\r\n]または[\n]を1個の改行コードとみなします。もし、[\n\r]という並びのコードがあると、改行2個とみなします。もっとも、そういう場合はまず無いと思います。また、古いMS-DOS形式のファイルでは最後に0x1a(EOF)コードがついている事がありますが、これは自動的にカットされます。
スポンサーリンク