|
HTML ドキュメント作成ツール HPP (HTML Pre-Processor) Ver 0.10 |
|
HTML ファイルをテキストエディターを使ってバリバリ書いていると、どうしても同じようなことの繰り返しになってしまいます。
特に、ヘッダーやフッターなどは統一してやりたいと思うのですが、どうしても直し忘れなどがあります。
C言語などでプログラミングしていますと、ファイルを部品化して必要なものを必要なところに読み込むことができます。この機能がどうしても欲しくて、最初は、Visual C++ のプリプロセッサーを使用していました。
ファイルのインクルードとマクロが使えるので、サイト全体で統一したい部分屋かてーごりーないで統一したいものなどを部品化することができ、画期的に楽になりました。
ところが、いろいろとやっているうちに不都合に気がつきました。C言語用のプリプロセッサーは、マクロ展開できるのは1行に限られています。ところが、&lf;script>&lf;!-- //-->&lf;/script>は、1行に記述してはいけないようなのです。
また、"" で括られた文字列内も置き換えることができません。
う〜ん、困った…。仕方ないので「自分で作っちゃえ!」ってことになりました。土日をまるまるつぶして2日間で作りました。現在仕様そのものがβ版ですので、どんどん、変更されています。その辺のところは覚悟してご使用になってください。m(_ _)m
使用法
まず、HPP.EXE をパスの通っているフォルダーに格納してください。
次に ??????.hts と言う名前のソースファイルを作成してください。このファイルは通常のHTML ファイルでかまいません。このファイルをコンパイルすると、?????.html と言う名前のファイルを作ります。拡張子に気をつけてください。もし、入力ファイルの拡張子が、.html だと、ソースファイルが失われてしまいます。(^_^;
次に Win98 の MS-DOSプロンプト、WinNT の コマンドラインから
C:\My Documents\HomePage>HPP ソースファイル名
とタイプしてください。
ソースファイルの内容が通常の HTML ファイルですと、そのまま出力されているはずです。
コメント
ホワイトスペースを除いた行頭に #= があるとその行はコメントと見なして切り捨てます。
行制御
行末が ## の場合、その行の改行文字を切り捨てます。
行末が # の場合、その行の改行文字を切り捨て、次の行と結合します。
# と ## の違いは重要です。HPP は、1行ずつ読み込んで変換処理を行います。従って、マクロの引数が複数行にわたることができません。これでは不便なので、行末に # を一つ置くことによって行を連結します。
HPP は、各行を処理するとき、まず、%%内を引数に置き換えてからマクロの展開に入ります。従って、1行の中に複数のマクロがあるときに、マクロ内で引数の値を変更しても後続のマクロには影響を与えません。
従って引数を変更するマクロを記述したときには必ず改行する必要がありますが、その場合空行が出力されてしまい出力結果の体裁が悪くなってしまいます。そこで、##を記述してやると、行そのものの連結は行わないので、正しくマクロ展開され、不要な改行が出力されないですみます。
マクロ展開
マクロは、マクロ名を $で括って記述すると展開されます。
は
と展開されます。
マクロには引数を与えることができます。マクロ定義中では引数は、%0% 〜 %99%と記述します。
は
と展開されます。
引数展開
HPP は読み込んだ行のマクロを展開する前に、% で括られた引数を置き換えます。
マクロの引数は、左から、%0% %1% %2% … %99% と置き換えられます。また、マクロそのものの名前を % で括ることによって置き換えることができます。
この展開は1段のみでマクロ中のマクロおよびコマンドはそのまま出力されます。
は
と展開されます。
コマンド
コマンドは、# で始まります。また、ホワイトスペースをのぞく行頭に起きます。使用できるコマンドは以下の通りです。
| #include | 指定されたファイルを読み込みます。 |
| #define | マクロを定義します。 |
| #defineStyle | スタイルを簡単に定義します。 |
オプション変更コマンド
| #macroSeparator | マクロ引数の区切り文字を変更します。 |
| #macroPrefix | マクロの接頭接尾文字を変更します。 |
| #macroNestMax | マクロのネストの上限を変更します。 |
| #argumentPrefix | 引数置換の接頭接尾文字を変更します。 |
| #tabCount | TAB->SPACE 変換の桁数を変更します。 |
| #fileNameCorrection | ファイル名補正の方法を指示します。 |
ブロックコマンド
|
#defineBlock #endBlock |
マクロ定義ブロック |
|
#text #endtext |
プレーンテキストブロック |
|
#HTML #endHTML |
HTML ブロック |
|
#para #endpara |
複数段落ブロック |
|
#tr #endtr |
テーブルの行定義ブロック |
制御コマンド
|
#if #elseif #else #endif |
条件によってコンパイルするブロックを切り替えます。 |
|
#repeat #endrepeat |
ブロックを指定回数繰り返します。 |
|
#irp #endirp |
引数リストを1つずつ指定マクロに代入してブロックをコンパイルします。 |
|
#irpc #endirpc |
指定文字列を1文字ずつマクロに代入してブロックをコンパイルします。 |
|
#call #endcall |
ブロックの各行を引数として指定マクロを呼び出します。 |
マクロ変更コマンド
| #eval | 式を計算しその値をマクロに登録します。 |
| #set | 文字列をマクロに登録します。 |
| #insert | 引数リストに文字列を挿入します。 |
| #delete | 引数リストから引数を削除します。 |
| #date | 現在の日付および時刻を指定書式でマクロに登録します。 |
| #fileName | ファイル名前の正当性をチェックしマクロに登録します。 |
| #fileDate | ファイルのタイムスタンプを指定書式でマクロに登録します。 |
| #fileSize | ファイルのサイズをマクロに登録します。 |
| #toupper | 文字列をすべて大文字に変換してマクロに登録します。 |
| #tolower | 文字列をすべて小文字に変換してマクロに登録します。 |
| #substr | 文字列中の部分文字列をマクロに登録します。 |
| #exist | ファイルが存在するか調べ結果をマクロに登録します。 |
これらのコマンドはソースファイル中のどこにでも置くことができます。
組み込みマクロ
複雑な処理を簡単に行うためにいくつかの組み込みマクロがあります。
| $img | イメージタグを出力 |
| $a | アンカータグを出力 |
| $date | 現在の日付と時刻を取得します。 |
| $fileName | 指定ファイルの正確なファイル名を出力 |
| $fileDate | 指定ファイルのタイムスタンプを出力 |
| $fileSize | 指定ファイルのサイズを出力 |
| $eval | 式の値を出力 |
| $toupper | 指定文字列を大文字に変換して出力(全角対応) |
| $tolower | 指定文字列を小文字に変換して出力(全角対応) |
| $substr | 指定文字列の部分文字列を出力 |
| $if | 2つの文字を比較し結果によって選択出力 |
| $numFmt3 | 3桁ごとに ,(カンマ)で区切りって出力 |
日付の書式について
日付書式文字列は、C言語の strftime() と同じです。
| %a | 曜日の省略名 |
| %A | 曜日の正式名 |
| %b | 月の省略名 |
| %B | 月の正式名 |
| %c | ロケールに応じた日付と時間の表現 |
| %d | 10 進数で表す月の日付 (01〜31) |
| %H | 24 時間表記の時間 (00〜23) |
| %I | 12 時間表記の時間 (01〜12) |
| %j | 10 進数で表す年頭からの日数 (001〜366) |
| %m | 10 進数で表す月 (01〜12) |
| %M | 10 進数で表す分 (00〜59) |
| %p | 現在のロケールの AM/PM |
| %S | 10 進数で表す秒 (00〜59) |
| %U | 10 進数で表す週の通し番号。日曜日を週の最初の日とする (00〜53)。 |
| %w | 10 進数で表す曜日。日曜日を 0 とする (0〜6)。 |
| %W | 10 進数で表す週の通し番号。月曜日を週の最初の日とする (00〜53)。 |
| %x | 現在のロケールの日付表示 |
| %X | 現在のロケールの時刻表示 |
| %y | 10 進数で表す西暦の下 2 桁 (00〜99) |
| %Y | 10 進数で表す 4 桁の西暦 |
| %z、%Z | 時間帯の名前またはその省略名。時間帯がわからない場合には文字を入れない。 |
| %% | パーセント記号 |
printf 関数と同じように、# フラグを書式指定コードの前に付けられます。その場合、書式指定コードの意味は以下のようになります。
| %#a、%#A、%#b、%#B、%#p、%#X、%#z、%#Z、%#% | # フラグは無視される |
| %#c | 現在のロケールに応じた日付と時刻の長い表現。"Tuesday、March 14、1995、12:41:29" など |
| %#x | 現在のロケールに応じた長い日付表現。"Tuesday、March 14、1995" など |
| %#d、%#H、%#I、%#j、%#m、%#M、%#S、%#U、%#w、%#W、%#y、%#Y | 先行ゼロがあれば削除 |
式について
一部の引数には整数式を書くことができます。
数値及び演算は、通常32ビットの範囲で扱います。ただし、HIGH,LOW演算子は,32ビットの値のうちの下位16ビットのみを対象とし,上位16ビットを切り捨てます。
式の中には、後述の数値表記以外の任意の場所に、ホワイトスペースを含める事ができます。
数値文字列にホワイトスペースを含める事はできません。その代わりに,末尾以外の任意の場所に'_'を含める事ができます。
基数が後置の場合(nnnnHなど),数値の先頭は必ず数字(0〜9)で始まらなければなりません。
前置16進表記の$nnnnは,$の前または後に-をつけて,マイナスの値を指定する事ができます。 ($-A000 , -$A000 どちらでもかまわない) ただし,$の後ろに-をつける場合,演算子とは認識していませんので,ホワイトスペースを含める事はできません。
数値表記: 10進数 nnnn 0dnnnn nnnnd nnnnD 16進数 $nnnn 0xnnnn nnnnh nnnnH 8進数 0onnnn nnnno nnnnO 2進数 0bnnnn nnnnb nnnnB 単項演算子: + 単項プラス - 単項マイナス ~ ビットごとの補数 (1の補数) HIGH 16ビット中の上位8ビットの値 LOW 16ビット中の下位8ビットの値 単項論理演算子: ! 論理否定 2項演算子: * 乗算 / 除算 % 剰余 + 加算 - 減算 << 左シフト >> 右シフト & ビットごとのAND (論理積) | ビットごとのOR (論理和) ^ ビットごとのXOR (排他的論理和) == 等しい != 等しくない < より小さい <= より小さいか等しい => より大きいか等しい > より大きい && 論理的 AND || 論理的 OR 優先順位: + - ! ~ HIGH LOW (単項) * / % + - << >> == != < <= => > & | ^ && ||
|
間違い、ウソ、わかりにくい所など、お気づきの点がございましたら、kiya@asahi.email.ne.jp までE-Mailをいただければと思います。 |
|