mkprintf
mkprintfとは
テキスト文書、特にHTMLで書かれた文書を、C系の言語(C、Perl、PHP)のprintf文に変換します。また、%、¥、”等のエスケープが必要な文字は、自動的にエスケープされます。
HTML文書では先頭のスペースや空行は関係ないので、行の先頭のスペースやタブは自動的にカットされます。また、空行は出力から除外されます。ただし、オプションでそれらの処理を制御することもできます。
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-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 の後にスペースで区切って、出力ファイル名を入れてください。 | |
先頭のタブやスペースをカットせずにそのまま出力します。 | |
空行であっても、そのまま出力します。 | |
ヘルプを出力します。 |
例
mkprintf test.html
mkprintf < test.html
mkprintf < test.html
test.htmlというファイルを読み込んで、printf文にして出力します。上と下は同じ動作をしますが、下は標準入力からリダイレクトしています。
mkprintf test.html -o test.php
mkprintf test.html > 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)コードがついている事がありますが、これは自動的にカットされます。
このページの先頭へ
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)コードがついている事がありますが、これは自動的にカットされます。
広告