001 : <?php 002 : // 行番号付きHTML生成サービス【PHP】 003 : // cf. TextDoclet with VisualWorks 004 : // Created by M.Miyazaki : 2012.06.20 005 : // Modified by M.Miyazaki : 2012.09.27 006 : 007 : /** 008 : * 1タブあたりの標準スペース数 009 : */ 010 : $DEFAULT_TABSPACE = 4; 011 : 012 : /** 013 : * 1タブあたりの最小スペース数 014 : */ 015 : $MINIMUM_TABSPACE = 0; 016 : 017 : /** 018 : * 1タブあたりの最大スペース数 019 : */ 020 : $MAXIMUM_TABSPACE = 16; 021 : 022 : /** 023 : * 作成者の名称 024 : */ 025 : $authorName = "NanigashiBiyori"; 026 : 027 : /** 028 : * 作成者のURL 029 : */ 030 : $authorURL = "http://www.cc.kyoto-su.ac.jp/~g0947424/"; 031 : 032 : /** 033 : * HTMLに出力する文字列として整形(エンティティ変換、タブ→スペース変換)を施して応答する。 034 : * @param $aString 整形を施す文字列 035 : */ 036 : function stringEscape($aString, $tabSpace = null) 037 : { 038 : global $DEFAULT_TABSPACE; 039 : if ($tabSpace === null) { $tabSpace = $DEFAULT_TABSPACE; } 040 : 041 : $spaces = str_pad("", $tabSpace, " "); 042 : $aString = htmlspecialchars($aString); 043 : $aString = preg_replace("/\t/u", $spaces, $aString); 044 : return $aString; 045 : } 046 : 047 : /** 048 : * 指定されたキーのPOSTデータを取得する 049 : * @param $key POSTデータから探し出すキー 050 : */ 051 : function getPostData($key) 052 : { 053 : $value = null; 054 : if (array_key_exists($key, $_POST)) { 055 : $value = $_POST[$key]; 056 : } 057 : return $value; 058 : } 059 : 060 : /** 061 : * ヘッダーを生成して応答する。 062 : * @param $titleString HTMLページのタイトル文字列 063 : */ 064 : function getHeader($titleString) 065 : { 066 : $aBuffer = "<!DOCTYPE html>\n"; 067 : $aBuffer .= "<html lang=\"ja\">\n"; 068 : $aBuffer .= "<head>\n"; 069 : $aBuffer .= "<meta charset=\"UTF-8\">\n"; 070 : $aBuffer .= "<title>" . stringEscape($titleString) . "</title>\n"; 071 : $aBuffer .= "<style type=\"text/css\">\n"; 072 : $aBuffer .= "<!--\n"; 073 : $aBuffer .= "body, body pre {\n"; 074 : $aBuffer .= " background-color : #ffffff;\n"; 075 : $aBuffer .= " margin : 20px;\n"; 076 : $aBuffer .= " padding : 10px;\n"; 077 : $aBuffer .= " font-family : Monaco, monospace;\n"; 078 : $aBuffer .= " font-size : 10pt;\n"; 079 : $aBuffer .= "}\n"; 080 : $aBuffer .= "-->\n"; 081 : $aBuffer .= "</style>\n"; 082 : $aBuffer .= "</head>\n"; 083 : $aBuffer .= "<body>\n"; 084 : $aBuffer .= "<pre>\n"; 085 : return $aBuffer; 086 : } 087 : 088 : /** 089 : * 本体部分を生成して応答する。 090 : * @param $zeroPadding 行番号の上位桁を「0」で埋めるか否か(真偽値) 091 : * @param $tabSpace タブをスペースに変換する際、何文字のスペースに変換するか(数値) 092 : * @param $inputText HTML化するテキスト 093 : */ 094 : function getContents($zeroPadding, $tabSpace, $inputText) 095 : { 096 : $pad = ($zeroPadding) ? "0" : " "; 097 : $lines = explode("\n", $inputText); 098 : $digits = strlen(count($lines) . ""); 099 : $aBuffer = ""; 100 : 101 : foreach($lines as $index => $line) 102 : { 103 : $lineNumber = $index + 1; 104 : $displayLineNumber = sprintf("%" . $pad . $digits . "d", $lineNumber); 105 : $aBuffer .= "<a id=\"line." . $lineNumber . "\">" . $displayLineNumber . "</a> : "; 106 : $aBuffer .= stringEscape($line, $tabSpace) . "\n"; 107 : } 108 : 109 : return $aBuffer; 110 : } 111 : 112 : /** 113 : * フッターを生成して応答する。 114 : * @param $hasAuthorInformation 生成に関する詳細情報を表示するか否か(真偽値) 115 : */ 116 : function getFooter($hasAuthorInformation) 117 : { 118 : global $authorName, $authorURL; 119 : 120 : $aBuffer = "</pre>\n"; 121 : if ($hasAuthorInformation) 122 : { 123 : // タイムゾーンの設定 124 : 125 : 126 : $aBuffer .= "<hr>\n"; 127 : $aBuffer .= "<p>This document was generated by <a href=\"" . $authorURL . "\">" . $authorName . "</a>"; 128 : $aBuffer .=" on " . date("Y/m/d") . " at " . date("H:i:s") . ".</p>\n"; 129 : } 130 : $aBuffer .= "</body>\n"; 131 : $aBuffer .= "</html>\n"; 132 : return $aBuffer; 133 : } 134 : 135 : 136 : /* モード認識と具体的な処理 */ 137 : $mode = getPostData("mode"); 138 : 139 : if ($mode === "createHTML") { 140 : // HTMLを生成するモード 141 : 142 : $aBuffer = ""; 143 : 144 : if (($titleString = getPostData("titleString")) === null) { $titleString = ""; } 145 : $aBuffer .= getHeader($titleString); // ヘッダー生成 146 : 147 : $zeroPadding = (getPostData("zeroPadding") !== null) ? true : false; 148 : if (!is_integer($tabSpace = getPostData("tabSpace")) || !($MINIMUM_TABSPACE <= $tabSpace && $tabSpace <= $MAXIMUM_TABSPACE)) { 149 : $tabSpace = $DEFAULT_TABSPACE; 150 : } 151 : if (($inputText = getPostData("inputText")) === null) { $inputText = ""; } 152 : $aBuffer .= getContents($zeroPadding, $tabSpace, $inputText); // 本体部分生成 153 : 154 : $hasAuthorInformation = (getPostData("authorInformation") !== null) ? true : false; 155 : $aBuffer .= getFooter($hasAuthorInformation); // フッター生成 156 : 157 : print $aBuffer; 158 : 159 : } else { 160 : // 予想外の呼び出し(直接とか) 161 : print "Sorry, This is unexpected page. Go back to '" . $authorURL . "'."; 162 : } 163 : 164 : ?>
This document was generated by NanigashiBiyori on 2012/09/27 at 17:51:01.