タイミングチャート清書サービス の履歴(No.2)
更新- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- ソフトウェア/タイミングチャート清書サービス へ行く。
概要†
こちらで紹介したタイミングチャート清書スクリプトをオンラインで使えるようにしました。
- コードを書けばほぼリアルタイムで清書結果を確認できます
- 清書したタイミングチャートは SVG または PNG 形式でダウンロードできます
&ref(): File not found: "screen-capture1.png" at page "ソフトウェア/タイミングチャート清書サービス";
設置アドレス†
ソースコード†
LANG:php(linenumber) <?php function generate_svg($source) { $descriptorspec = array( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("file", "/dev/null", "a") // stderr ); $process = proc_open('/usr/local/bin/tchart.rb', $descriptorspec, $pipes); if (is_resource($process)) { fwrite($pipes[0], $source); fclose($pipes[0]); return stream_get_contents($pipes[1]); fclose($pipes[1]); $return_value = proc_close($process); } return ""; } function bad_referer() { $referer = $_SERVER["HTTP_REFERER"]; $url = parse_url($referer); return $url['host'] != $_SERVER["SERVER_NAME"]; } if(@$_POST['source'] && @$_POST['format']=='svg'){ if(bad_referer()) exit; # header('Content-type: image/svg+xml'); header('Content-Type: application/force-download'); header('Content-Disposition: attachment; filename="tchart.svg"'); echo generate_svg($_POST['source']); exit; } if(@$_POST['source'] && @$_POST['format']=='png'){ if(bad_referer()) exit; $svg = generate_svg($_POST['source']); $tempname = tempnam('/tmp', 'tchart'); $svgname = $tempname . '.svg'; $pngname = $tempname . '.png'; $svgfile = fopen($svgname, 'w'); fwrite($svgfile, $svg); fclose($svgfile); system("/usr/bin/convert ${svgname} ${pngname}"); unlink($svgname); # header("Content-Type: image/png"); header('Content-Type: application/force-download'); header('Content-Disposition: attachment; filename="tchart.png"'); readfile($pngname); unlink($pngname); exit; # 下記はなぜかうまく動かない # $im = new Imagick(); # $im->readImageBlob($svg, 'tchart.svg'); # $im->setImageFormat("png24"); # header("Content-Type: image/png"); # header('Content-Disposition: attachment; filename="tchart.png"'); # echo $im; # exit; } ?> <!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>Timing chart formatter</title> <meta charset="utf-8"> <meta name="description" content="Timing chart formatter"> <meta name="author" content="Osamu Takeuchi <osamu@big.jp>"> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- link rel="stylesheet" href="" --> <!--[if lt IE 9]> <script src="//cdn.jsdelivr.net/html5shiv/3.7.2/html5shiv.min.js"></script> <script src="//cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script> <![endif]--> <!-- link rel="shortcut icon" href="" --> </head> <body> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <h1>Timing chart formatter</h1> <h2>Source Code</h2> <a href="http://dora.bk.tsukuba.ac.jp/~takeuchi/?%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%2Ftchart.rb">View sytax of the source text.</a><br> <br> <form name="form" method="post" target="_blank"> <input type="hidden" name="format" id="format" value="svg" /> <textarea id="source" name="source" cols="120" rows="20"># comment clock _~_~_~_~_~_~_~_~_~_~_ data =?====X=DATA========X=?==== valid _____~~~~~~~~~~______ ready _____________[~~]______ </textarea> </form> <input type="button" id="reload" value="Reload"> <span id="indicator"></span><br /> <h2>Result</h2> <input type="button" id="as_svg" value="Download as svg" /> <input type="button" id="as_png" value="Download as png" /><br /> <div id="result"></div> </body> <script> $(function(){ var reload = function(source) { if (source != "") { $("#indicator").html("*"); $.post("tchart.php", { "source": source, "format": "svg" }, function(data, status) { if (status=="success") { $("#result").html(data); } else { $("#result").html(status); } $("#indicator").html(""); }, "text" ); } } $('#reload').on('click', function(e){ source = $("#source").val(); reload(source); }); var lastSource = ''; setInterval(function(){ source = $("#source").val(); if (source!=lastSource) reload(source); lastSource = source; },1000); $('#as_svg').on('click', function(e){ $('#format').val('svg'); document.form.submit(); }); $('#as_png').on('click', function(e){ $('#format').val('png'); document.form.submit(); }); }); </script> </html>
コメント・質問†
Counter: 73030 (from 2010/06/03),
today: 3,
yesterday: 24