[戻る] [ゲストブック(書込)] [ゲストブック(閲覧)]
このページは、私がいろいろ試した事をメモ感覚で書き足していくという方針で運営してい る。これによって「更新停滞」という状況を防ごうと考えたのだが、そういう方針だとタグ を打つのすら面倒に感じることがある(メモ感覚でタグを打てないわけではないが、面倒な ことには変わりない)。やはり、メモならばプレーンテキストである。
というわけで、はじめはplain2を使おうかと考えた。しかし、やってみるとどうも見映えが しない。単に私の使い方が悪いだけなのだと思うが、使い方を覚えるのも面倒だっ たため、作ってしまったのがこのスクリプトである。
なお、はっきり言ってこのスクリプトが人の役に立つとは思えない 。上で書いたとおり、人のスクリプトを使いこなすくらいならplain2を使いこなし たほうがきっと役に立つだろう。ただ、すごく簡単な仕様で拡張性高く作ったので、 興味のある人が適当に参考にでもしてくれると嬉しいなぁ、と思う。
#!/usr/bin/ruby
BASE=0; P=1; PRE=2; LISTT=3; LISTI=4; FORCEPRE = 5
level = BASE
filename = ARGV[0]
leng = filename.length - 4
filename = filename[0..leng]
ifp = open(filename+"pre","r")
ofp = open(filename+"html","w")
title = ifp.gets.chop
ofp.print '<?xml version="1.0" ?>',"\n"
ofp.print '<!DOCTYPE html',"\n"
ofp.print ' PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"',"\n"
ofp.print ' "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',"\n"
ofp.print '<html xmlns="http://www.w3.org/1999/xhtml">',"\n"
ofp.print '<head>',"\n"
ofp.print '<title>Little Penguin</title>',"\n"
ofp.print '<link href="./style.css" type="text/css" rel="stylesheet" />',"\n"
ofp.print '</head>',"\n"
ofp.print '<body background="bggrnd.png">',"\n"
ofp.print '<p>',"\n"
ofp.print '<a href="./index.html">[戻る]</a>',"\n"
ofp.print '<a href="@geobook">[ゲストブック(書込)]</a>',"\n"
ofp.print '<a href="geobook.html">[ゲストブック(閲覧)]</a>',"\n"
ofp.print '</p>',"\n"
ofp.print "\n<h1>#{title}</h1>\n\n"
while (lin = ifp.gets)
lin.chop!
if lin=='</pre>'
level = BASE
ofp.print "</pre>\n"
next
end
if level==FORCEPRE
ofp.print lin,"\n"
end
if lin=='<pre>'
level = FORCEPRE
ofp.print "<pre>\n"
next
end
if level != FORCEPRE
if (lin=~/^$/)!=nil
case level
when P
ofp.print "</p>\n"
when PRE
ofp.print "</pre>\n"
when LISTT
ofp.print "</dl>\n"
when LISTI
ofp.print "</dd>\n</dl>\n"
when BASE
ofp.print "\n"
end
level = BASE
next
end
if (lin=~/^\t/)==0
case level
when P
ofp.print lin,"\n"
level=P
when PRE
ofp.print lin[1..lin.length-1],"\n"
level=PRE
when LISTT
ofp.print "<dd>\n",lin[1..lin.length-1],"\n"
level=LISTI
when LISTI
ofp.print lin[1..lin.length-1],"\n"
level=LISTI
when BASE
ofp.print "<pre>\n",lin[1..lin.length-1],"\n"
level=PRE
end
next
end
if (lin=~/^・/)==0
case level
when P
ofp.print lin,"\n"
level=P
when PRE
ofp.print lin,"\n"
level=PRE
when LISTT
ofp.print "<dt>",lin[2..lin.length-1],"</dt>\n"
level=LISTT
when LISTI
ofp.print "</dd>\n<dt>",lin[2..lin.length-1],"</dt>\n"
level=LISTT
when BASE
ofp.print "<dl>\n<dt>",lin[2..lin.length-1],"</dt>\n"
level=LISTT
end
next
end
if (lin=~/^◎/)==0
ofp.print "\n<h2>",lin[2..lin.length-1],"</h2>\n"
next
end
if (lin=~/^〇/)==0
ofp.print "\n<h3>",lin[2..lin.length-1],"</h3>\n"
next
end
case level
when P
ofp.print lin,"\n"
when BASE
ofp.print "<p>\n",lin,"\n"
end
level = P
end
end
ofp.print '<hr>',"\n"
ofp.print '<p align="right">',"\n"
ofp.print '<font size="2"><strong>Since 2002 by',"\n"
ofp.print ' mita-K. @Geo-SiliconValley-4305</strong></font>',"\n"
ofp.print '</p>',"\n"
ofp.print '</body>',"\n"
ofp.print '</html>',"\n"
基本的に行単位で読みこみ、前の行と現在の行の属性(段落内、箇条書、preタグ の中、等。プログラム中ではlevel変数によって管理している)によってタグを付 けている。例えば、前の行が<p>タグの中(「段落内」属性)で、次の行が 空白行ならば、</p>タグを出力したうえでlevelをBASE(「どのタグの内部に もない」属性)にする、など。
現在の行の属性判断は、行頭の文字によっている。
のように判断する。
特例として、最初の行だけは何がどうあろうとタイトルと判断され、h1タグによ る見出しとなる。
使い方は、次のようなプレーンテキストを書くだけである。
ここはタイトル(h1) ◎見出し(h2) 普通の段落は上下一行ずつ空行で区切って書く。 ◯見出し(h3) ・箇条書き タブで、箇条書きの内容。 ・続き 箇条書を続けるときは、空行を挟まずに書く。 <pre> preタグで囲んでおくと、一切の変換をしない。ソースコードの掲載等に便利。 </pre> 通常の段落でタブを入れる、つまり $ hoge とかやると、preタグが指定される。
このテキストをtest.preなどとして保存し(拡張子は.preしか受けつ
けない)、
$ trans test.pre
などと打てばOKである(ただしその前に上のスクリプトを実行可能にしてパスの 通った場所に置いとかなければ)。
このテキストの整形結果は、こちら。今のとこ ろ、それ以上の機能はない。しかし、これで格段に楽になったのは事実である。
Since 2002 by mita-K. @Geo-SiliconValley-4305