//---------------------------------------------------------- // JavatoHtml.mac // JavaソースをHTML変換 // Yamamoto Yasuma 2005/09/06 // http://www7.plala.or.jp/kfb/ // // 選択範囲もしくは全文に対して、以下の処理を行います。 // ・Javaキーワードのタグ付け(on/off可能、初期値on) // ・Javaコメントのタグ付け // ・タブ->空白変換(空白文字数は秀丸エディタの設定に依存) // ・&,",<,> の文字実体参照変換 // ・改行タグの付加(on/off可能、初期値off) // ・ヘッダ・フッタの付加(on/off可能、初期値on) // // シフトJISでの動作を想定しています。 // コメント内・ダブルクォート内にキーワードとマッチする文字列があっても、タグをつけません。 // 数万行に達するようなコードを変換するには時間を要します。 // カスタマイズは以下ソースのオプション部分を変更してください。 //---------------------------------------------------------- title "セットアップ中..."; disabledraw; //---------------------------------------------------------- // オプション //---------------------------------------------------------- //デバッグするか #Debug = no; //ヘッダ・フッタを付加するか #DoAddHeaderFooter = yes; //ソースの前に付加する文字列 $Header = "
\n";
//ソースの後に付加する文字列
$Footer = "
\n"; //改行タグを入れるか #DoReplaceLineBreak = no; //改行タグ $LineBreak = "
"; //キーワード強調を行うか? #DoEmphasizeKeyword = yes; //キーワードに付加するタグ $KeywordBegin = ""; $KeywordEnd = ""; //コメントに付加するタグ $CommentBegin = ""; $CommentEnd = ""; //---------------------------------------------------------- // 内部動作的な変数 //---------------------------------------------------------- //コメントにつけるタグのマーク。まず使わないような文字を指定 $CommentMarkBegin = "\xff0"; $CommentMarkEnd = "\xff1"; //キーワードにつけるタグのマーク。まず使わないような文字を指定 $KeywordMarkBegin = "\xff2"; $KeywordMarkEnd = "\xff3"; //キーワードにつけるタグのマーク、無効化されたもの。上の二つと文字数が同じでないと正しく動作しません $KeywordMarkDisabled = "\xff4"; //キーワード #NumKeyword = 0; call AddKeyword "abstract"; call AddKeyword "boolean"; call AddKeyword "break"; call AddKeyword "byte"; call AddKeyword "case"; call AddKeyword "catch"; call AddKeyword "char"; call AddKeyword "class"; call AddKeyword "continue"; call AddKeyword "default"; call AddKeyword "do"; call AddKeyword "double"; call AddKeyword "else"; call AddKeyword "enum"; call AddKeyword "extends"; call AddKeyword "false"; call AddKeyword "final"; call AddKeyword "finally"; call AddKeyword "float"; call AddKeyword "for"; call AddKeyword "if"; call AddKeyword "implements"; call AddKeyword "import"; call AddKeyword "instanceof"; call AddKeyword "int"; call AddKeyword "interface"; call AddKeyword "long"; call AddKeyword "native"; call AddKeyword "new"; call AddKeyword "null"; call AddKeyword "package"; call AddKeyword "private"; call AddKeyword "protected"; call AddKeyword "public"; call AddKeyword "return"; call AddKeyword "short"; call AddKeyword "static"; call AddKeyword "super"; call AddKeyword "switch"; call AddKeyword "synchronized"; call AddKeyword "this"; call AddKeyword "throw"; call AddKeyword "throws"; call AddKeyword "transient"; call AddKeyword "true"; call AddKeyword "try"; call AddKeyword "void"; call AddKeyword "volatile"; call AddKeyword "while"; //---------------------------------------------------------- // メイン処理 //---------------------------------------------------------- $SearchBuffer = searchbuffer; #SearchOption = searchoption; $ReplaceBuffer = replacebuffer; //選択範囲をテンポラリに持っていく if( !selecting ) selectall; call MoveTemp; #SrcHidemaru = ##return; //キーワードにマークをつける if (#DoEmphasizeKeyword) { ##i = 0; call TitleMsg "キーワード処理中..."; // $$MsgNumKeyword = "/" + str(#NumKeyword) + ")"; while (##i < #NumKeyword) { // call TitleMsg "キーワード処理中(" + str(##i + 1) + $$MsgNumKeyword; replaceallfast $Keyword[##i], $KeywordMarkBegin + $Keyword[##i] + $KeywordMarkEnd, word, casesense, noregular; ##i = ##i + 1; } } //コメント処理 gofiletop; #Finished = false; call TitleMsg "コメント処理中..."; //$$MsgLineCount = "/" + str(linecount2) + ")"; while (! #Finished) { //コメント開始点を探す // call TitleMsg "コメント処理中(" + str(lineno) + $$MsgLineCount; searchdown2 "/\\*|//|\"|'", casesense, regular; // /*,//,",'にヒット if (!result) { //終了 #Finished = true; } else { ##ComX = foundtopx; ##ComY = foundtopy; moveto foundendx - 1, foundendy; if (code == 0x2a) // * { // "/*"コメント moveto ##ComX, ##ComY; // コメント記号の前に移動 insert $CommentMarkBegin; right; right; ##ComBeginX = x; ##ComBeginY = y; // コメント終了点を探す searchdown2 "*/", casesense, noregular; if (result) { moveto foundendx, foundendy; } else { gofileend; #Finished = true; } call DisableKeywordMark ##ComBeginX, ##ComBeginY; insert $CommentMarkEnd; } else { if (code == 0x2f) // / { // "//"コメント moveto ##ComX, ##ComY; // コメント記号の前に移動 insert $CommentMarkBegin; //コメント開始タグを挿入 right; right; ##ComBeginX = x; ##ComBeginY = y; golineend2; //コメント終了位置(行の最後)に移動 call DisableKeywordMark ##ComBeginX, ##ComBeginY; insert $CommentMarkEnd; } else { if (code == 0x22) // " { // 開始点まで移動 moveto ##ComX, ##ComY; // 終了点を探す setsearch "\"", 2; while(1) { finddown; if (result) { call IsEscape; if (! ##return) { right; break; } } else { gofileend; #Finished = true; break; } } call DisableKeywordMark ##ComX, ##ComY; } else { // ' // 終了点を探す setsearch "'", 2; while(1) { finddown; if (result) { call IsEscape; if (! ##return) { right; break; } } else { gofileend; #Finished = true; break; } } } } } } } //タブ->空白変換と実体参照変換 call TitleMsg "タブ・実体参照変換中..."; selectall; tospace; replaceallfast "&", "&"; replaceallfast "\"", """; replaceallfast "<", "<"; replaceallfast ">", ">"; //マークを変換 call TitleMsg "マーク変換中..."; if (#DoEmphasizeKeyword) { replaceallfast $KeywordMarkDisabled, "", casesense, noregular; replaceallfast $KeywordMarkBegin, $KeywordBegin, casesense, noregular; replaceallfast $KeywordMarkEnd, $KeywordEnd, casesense, noregular; } replaceallfast $CommentMarkBegin, $CommentBegin, casesense, noregular; replaceallfast $CommentMarkEnd, $CommentEnd, casesense, noregular; //改行タグを入れる if (#DoReplaceLineBreak) { call TitleMsg "改行タグ追加中..."; gofiletop; while (lineno < linecount2) { golineend2; insert $LineBreak; down; } golineend2; insert $LineBreak; } //ヘッダ・フッタを入れる call TitleMsg "終了処理中..."; if (#DoAddHeaderFooter) { gofiletop; insert $Header; gofileend; insert $Footer; } //テンポラリを閉じる call ReturnTemp #SrcHidemaru; setsearch $SearchBuffer, #SearchOption; setreplace $ReplaceBuffer; enabledraw; endmacro; //---------------------------------------------------------- // サブルーチン //---------------------------------------------------------- //キーワード追加 AddKeyword: $Keyword[#NumKeyword] = $$1; #NumKeyword = #NumKeyword + 1; return; //キーワードマークを無効に DisableKeywordMark: if (! #DoEmphasizeKeyword) return; ##EndX = x; ##EndY = y; insert $KeywordMarkBegin; //終点に番兵を置く moveto ##1, ##2; setsearch $KeywordMarkBegin + "|" + $KeywordMarkEnd, 18; while(1) { finddown2; // if (result) // { if (x == ##EndX && y == ##EndY) { beginsel; moveto foundendx, foundendy; delete; //番兵を消す break; } else { overwrite $KeywordMarkDisabled; //無効化 } // } // else // { // break; // } } return; //エスケープ文字かどうかを判別 IsEscape: ##PosX = x; ##PosY = y; left; if (code == 0x5c) //\ { left; if (code == 0x5c) { moveto ##PosX, ##PosY; return false; } else { moveto ##PosX, ##PosY; return true; } } moveto ##PosX, ##PosY; return false; //作業用秀丸に移動 MoveTemp: cut; ##SrcHidemaru = hidemaruhandle(0); if (#Debug) { newfile; } else { openfile "/h"; } paste; return ##SrcHidemaru; //作業用秀丸から戻る ReturnTemp: selectall; copy; ##TempHidemaru = hidemaruhandle(0); setactivehidemaru ##1; closehidemaruforced ##TempHidemaru; paste; return; //タイトルにメッセージを出す(テンポラリ作業中) TitleMsg: ##TempHidemaru = hidemaruhandle(0); setactivehidemaru #SrcHidemaru; title $$1; setactivehidemaru ##TempHidemaru; return;