高橋メソッドCGI
高橋メソッド(http://www.rubycolor.org/takahashi/)をHTML(JavaScript)で再現するものを、wstarさんが作っていた(http://www13.cds.ne.jp/~wstar/ksr/parts.cgi?2005040870)のを見て、あまりに簡単な出来に驚いたのでCGI化してみた。 (もろもろの情報は http://www.hyuki.com/tf/ 経由)
テキストエリアに文字を打ちこむと、高橋メソッドのスライドが生成されます。改行はそのままスライドの改行として反映されます。空行でスライドの切り替え。色つけとか余分な機能はまったくなし。
高橋メソッドCGIの高橋メソッドによる説明はこちら
作ってからいろいろ見てみると、やっぱりもうある。ここ(http://la.ma.la/blog/diary_200504080545.htm)とか。調べてから作れっちゅうのワハハ。笑っておこう。
ソースはこんなの。wstarさんのHTMLをストレートにCGIに。なんの工夫もありません。
#!/usr/local/bin/ruby
require 'cgi'
$myself = File.basename($0)
def head(str)
return <<EOS_h
<html>
<head>
<title>高橋メソッド</title>
<style type="text/css">
.slide {
font-family : sans-serif;
font-size : 100px;
position : absolute;
top : 50px;
visibility : hidden;
text-align : center;
z-index : 1;
}
html, body, p {
padding : 0;
margin : 0;
}
p#menu {
position : absolute;
z-index : 2;
}
</style>
<script type="text/javascript">
var pages = null;
var nowPage = 0;
function getElementsByClass(searchClass){
var classElements = new Array();
var allElements = document.getElementsByTagName('*');
var j = 0;
for (var i=0; i < allElements.length; i++) {
if (allElements[i].className == searchClass) {
classElements.push(allElements[i]);
}
}
return classElements;
}
function nextPage(page){
if (nowPage < pages.length - 1){
toPage(nowPage + 1);
}
}
function prevPage(page){
if (nowPage > 0){
toPage(nowPage - 1);
}
}
function lastPage(page){
toPage(pages.length - 1);
}
function toPage(page){
pages[nowPage].style.visibility = "hidden";
pages[nowPage].style.fontSize = "100px";
nowPage = page;
var p = pages[page];
var nHeight = 100 * document.body.clientHeight / p.clientHeight;
var nWidth = 100 * document.body.clientWidth / p.clientWidth;
var nnn = nHeight > nWidth ? nWidth : nHeight;
p.style.fontSize = nnn + "px";
p.style.top = (document.body.clientHeight - p.clientHeight) / 2;
p.style.left = (document.body.clientWidth - p.clientWidth) / 2;
p.style.visibility = "visible";
}
function init(){
pages = getElementsByClass("slide");
toPage(0);
toPage(0);
}
</script>
</head>
<body onload="init()">
<p id="menu">
<a href="#{$myself}?takahashi=#{CGI.escape(str)}">再生成</a>
<a href="javascript:toPage(0)">先頭</a>
<a href="javascript:nextPage()">次へ</a>
<a href="javascript:prevPage()">戻る</a>
<a href="javascript:lastPage()">最後</a>
</p>
EOS_h
end
def footer
return <<EOS_f
</body>
</html>
EOS_f
end
cgi = CGI.new
print cgi.header({"type"=>"text/html","charset"=>"euc-jp"})
if cgi.params['gen'][0] == nil
print <<EOS
<html>
<head>
<title>
高橋メソッド
</title>
</head>
<body>
<h1>高橋メソッドCGI</h1>
<form action='#{$myself}' method="get">
<textarea name="takahashi" cols="80" rows="30">#{CGI.escapeHTML(cgi.params['takahashi'][0])}</textarea>
<input type="hidden" name="gen" value="true" />
<br/>
<input type="submit" value="スライド生成"/>
</form>
</body>
</html>
EOS
else
str = cgi.params['takahashi'][0]
mesarray = str.split("\r\n\r\n")
print head(str)
mesarray.each do |slide|
puts
puts "<pre class='slide'>"
puts CGI.escapeHTML(slide)
puts "</pre>"
puts
end
print footer
end
puts