| 1 |
wakaba |
1.1 |
|
| 2 |
|
|
=pod |
| 3 |
|
|
|
| 4 |
|
|
H2H -- Default Template (for Diary) |
| 5 |
|
|
|
| 6 |
|
|
Copyright 2001 the Watermelon Project. |
| 7 |
|
|
|
| 8 |
|
|
2001-05-20 wakaba |
| 9 |
|
|
- Fix new/sub id counting bug. |
| 10 |
|
|
2001-04-07 wakaba |
| 11 |
|
|
- Add `ACRONYM' and `ABBR' commands. |
| 12 |
|
|
2001-04-03 wakaba |
| 13 |
|
|
- Revision of most part. |
| 14 |
|
|
2001-03-31 wakaba |
| 15 |
|
|
- New file. |
| 16 |
|
|
|
| 17 |
|
|
=cut |
| 18 |
|
|
|
| 19 |
|
|
package H2H; |
| 20 |
|
|
$nl = "\x0d\x0a"; ## Newline character(s). |
| 21 |
|
|
|
| 22 |
|
|
## -- Information about this template. |
| 23 |
|
|
package H2H::Template; |
| 24 |
|
|
$basepath = $H2H::themepath.'default/'; |
| 25 |
|
|
$header = $basepath.'head.htt'; |
| 26 |
|
|
$footer = $basepath.'foot.htt'; |
| 27 |
|
|
|
| 28 |
|
|
## Initialization of theme. |
| 29 |
|
|
sub init { |
| 30 |
|
|
package H2H::Command; |
| 31 |
|
|
$_new = 0; |
| 32 |
|
|
$_sub = 0; |
| 33 |
|
|
$_fn = 0; |
| 34 |
|
|
$fn = ''; |
| 35 |
|
|
($d{mon}, $d{day}) = (@_[1,2]); |
| 36 |
|
|
($d{y}, $d{m}, $d{d}) = ($_[0], substr('0'.$_[1],-2), substr('0'.$_[2],-2)); |
| 37 |
|
|
$prefix = $_[3] || 'f'.$d{y}.$d{m}.$d{d}; |
| 38 |
|
|
package H2H::HnfFile; |
| 39 |
|
|
undef $tree; |
| 40 |
|
|
} |
| 41 |
|
|
|
| 42 |
|
|
## -- Page |
| 43 |
|
|
package H2H::URI; |
| 44 |
|
|
$mine = 'http://suika.fam.cx/~wakaba/d/'; |
| 45 |
|
|
$diary = $mine; |
| 46 |
|
|
$glossary{_} = '_glossary_#'; |
| 47 |
|
|
$glossary{person} = '_person_#'; |
| 48 |
|
|
$resolve = '/uri?uri='; |
| 49 |
|
|
|
| 50 |
|
|
package H2H::Page; |
| 51 |
|
|
$uri = ''; ## Base URI. |
| 52 |
|
|
$diaryuri = ''; ## Diary Base URI. |
| 53 |
|
|
$glossaryuri = '.temp/g.ja.html'; |
| 54 |
|
|
$personuri = ''; |
| 55 |
|
|
$basepath = ''; ## URI base path of related files. |
| 56 |
|
|
$uriuri = '/uri-res/N2L?'; |
| 57 |
|
|
|
| 58 |
|
|
sub start { |
| 59 |
|
|
return unless $H2H::Template::header; |
| 60 |
|
|
my $ret; |
| 61 |
|
|
open TEMP, $H2H::Template::header; while (<TEMP>) {$ret .= $_} close TEMP; |
| 62 |
|
|
$ret =~ s/%title%/$_[0]/g; $ret =~ s/%baseuri%/$basepath/g; |
| 63 |
|
|
$ret =~ s/%YYYY%/$H2H::Command::d{y}/g if $H2H::Command::d{y}; |
| 64 |
|
|
$ret =~ s/%MM%/$H2H::Command::d{m}/g if $H2H::Command::d{m}; |
| 65 |
|
|
$ret; |
| 66 |
|
|
} |
| 67 |
|
|
sub end { |
| 68 |
|
|
return unless $H2H::Template::footer; |
| 69 |
|
|
my $ret; |
| 70 |
|
|
open TEMP, $H2H::Template::footer; while (<TEMP>) {$ret .= $_} close TEMP; |
| 71 |
|
|
$ret =~ s/%title%/$_[0]/g; $ret =~ s/%baseuri%/$basepath/g; |
| 72 |
|
|
$ret; |
| 73 |
|
|
} |
| 74 |
|
|
|
| 75 |
|
|
package HNS::Hnf::UserVar; |
| 76 |
|
|
%Templates = ( |
| 77 |
|
|
TENKI => '[Å·µ¤:%value]', |
| 78 |
|
|
BASHO => "(%value)", |
| 79 |
|
|
TAION => 'Âβ¹: %valueÅÙ(ÀÝ»á)', |
| 80 |
|
|
LUNCH => 'Ãë¿©: %value', |
| 81 |
|
|
TAIJU => " ÂνÅ:%valueKg", |
| 82 |
|
|
SUIMIN => " ¿ç̲:%value»þ´Ö", |
| 83 |
|
|
BGM => " BGM:%value", |
| 84 |
|
|
HOSU => " %valueÊâ", |
| 85 |
|
|
HON => " ÆÉ½ñ:%value", |
| 86 |
|
|
KITAKU => " µ¢Âð»þ´Ö:%value", |
| 87 |
|
|
WALK => " »¶Êâ:%value", |
| 88 |
|
|
RUN => " ¥¸¥ç¥®¥ó¥°:%value", |
| 89 |
|
|
KEYWORD => '[¸°:%value]', |
| 90 |
|
|
CAT => '[ʬÎà:%value]', |
| 91 |
|
|
KION => '[µ¤²¹:%value]', |
| 92 |
|
|
T1 => '1¸Â:%value', |
| 93 |
|
|
T2 => '2¸Â:%value', |
| 94 |
|
|
T3 => '3¸Â:%value', |
| 95 |
|
|
T4 => '4¸Â:%value', |
| 96 |
|
|
T5 => '5¸Â:%value', |
| 97 |
|
|
T6 => '6¸Â:%value', |
| 98 |
|
|
T7 => '7¸Â:%value', |
| 99 |
|
|
SP => '%value', |
| 100 |
|
|
); |
| 101 |
|
|
|
| 102 |
|
|
|
| 103 |
|
|
package H2H::Command; |
| 104 |
|
|
|
| 105 |
|
|
sub startP {'<p>'} |
| 106 |
|
|
sub endP {'</p>'} |
| 107 |
|
|
|
| 108 |
|
|
sub startCITE { |
| 109 |
|
|
($cite, $citet) = @_; |
| 110 |
|
|
$cite = _link2uri($cite); |
| 111 |
|
|
$cite ? '<blockquote cite="'.$cite.'">' : '<blockquote>'} |
| 112 |
|
|
sub endCITE { |
| 113 |
|
|
$cite ? '<cite title="°úÍѸµ"><a href="'.$cite.'">'.($citet||$cite). |
| 114 |
|
|
'</a></cite></blockquote>': |
| 115 |
|
|
$citet ? '<cite title="°úÍѸµ">'.$citet.'</cite></blockquote>': |
| 116 |
|
|
'</blockquote>'; |
| 117 |
|
|
} |
| 118 |
|
|
|
| 119 |
|
|
sub startUL {'<ul>'} |
| 120 |
|
|
sub endUL {'</ul>'."\n"} |
| 121 |
|
|
sub startOL {'<ol>'} |
| 122 |
|
|
sub endOL {'</ol>'."\n"} |
| 123 |
|
|
sub textLI {'<li>'.$_[0].'</li>'} |
| 124 |
|
|
|
| 125 |
|
|
sub startPRE {'<pre>'} |
| 126 |
|
|
sub endPRE {'</pre>'} |
| 127 |
|
|
|
| 128 |
|
|
sub startDIV {$_[0] ? '<div class="'.$_[0].'">' : '<div>'} |
| 129 |
|
|
sub endDIV {'</div>'."\n"} |
| 130 |
|
|
|
| 131 |
|
|
sub startYAMI { |
| 132 |
|
|
$_[0] ? '<span class="yamimi">'.$_[0].'</span>': |
| 133 |
|
|
'<div class="yami">'; |
| 134 |
|
|
} |
| 135 |
|
|
sub endYAMI {'</div>'} |
| 136 |
|
|
|
| 137 |
|
|
sub startNEW { |
| 138 |
|
|
my $new = &_new(); $_sub = 0; |
| 139 |
|
|
my $secname = $_[0]; |
| 140 |
|
|
$H2H::HnfFile::tree .= '<li><a href="'.'#d'.$d{day}.'-'.$new.'">' |
| 141 |
|
|
.$secname.'</a>'; |
| 142 |
|
|
my $link = _link2uri($_[1]); |
| 143 |
|
|
if ($link) { |
| 144 |
|
|
$secname = '<a href="'.$link.'">'.$secname.'</a>'; |
| 145 |
|
|
} |
| 146 |
|
|
'<div class="section" id="d'.$d{day}.'-'.$new.'">'.$H2H::nl. |
| 147 |
|
|
'<h3><a href="'.$H2H::Page::uriuri.'urn:x-suika.fam.cx:fuyubi:'. |
| 148 |
|
|
"$d{y}:$d{m}:$d{d}:${new}\" class=\"self\">". |
| 149 |
|
|
'¡ú</a> '.$secname.'</h3>'; |
| 150 |
|
|
} |
| 151 |
|
|
sub _new {$_new++; $_new} |
| 152 |
|
|
sub endNEW { |
| 153 |
|
|
$H2H::HnfFile::tree .= '</li>'."\n"; |
| 154 |
|
|
&H2H::HnfFile::footnote().'</div>'.$H2H::nl |
| 155 |
|
|
} |
| 156 |
|
|
|
| 157 |
|
|
sub startSUB { |
| 158 |
|
|
my $new = $_new; |
| 159 |
|
|
my $sub = &_sub; |
| 160 |
|
|
my $secname = $_[0]; |
| 161 |
|
|
my $link = _link2uri($_[1]); |
| 162 |
|
|
if ($link) { |
| 163 |
|
|
$secname = '<a href="'.$link.'">'.$secname.'</a>'; |
| 164 |
|
|
} |
| 165 |
|
|
'<div class="subsection" id="d'.$d{day}.'-'.$new.'-'.$sub.'">'.$H2H::nl. |
| 166 |
|
|
'<h4><a href="'.$H2H::Page::uriuri.'urn:x-suika.fam.cx:fuyubi:'. |
| 167 |
|
|
"$d{y}:$d{m}:$d{d}:${new}:${sub}\" class=\"self\">". |
| 168 |
|
|
'@</a> '.$secname.'</h4>'; |
| 169 |
|
|
} |
| 170 |
|
|
sub _sub {$_sub++; $_sub} |
| 171 |
|
|
sub endSUB {'</div>'.$H2H::nl} |
| 172 |
|
|
|
| 173 |
|
|
sub startFN {my $_fn = &_fn; |
| 174 |
|
|
$fn .= "<li id=\"d$d{day}-fn${_fn}\">". |
| 175 |
|
|
'<a href="'.$H2H::Page::uriuri.'urn:x-suika.fam.cx:fuyubi'. |
| 176 |
|
|
":$d{y}:$d{m}:$d{d}:fn${_fn}\" class=\"self\">*${_fn}</a> "; |
| 177 |
|
|
"<a href=\"#d$d{day}-fn${_fn}\" class=\"fn\">*${_fn}</a>" |
| 178 |
|
|
} |
| 179 |
|
|
sub _fn {$_fn++; $_fn} |
| 180 |
|
|
sub textFN {$fn .= $_[0]} |
| 181 |
|
|
sub endFN {$fn .= '</li>'."\n"} |
| 182 |
|
|
|
| 183 |
|
|
sub textLINK {my $link = _link2uri(shift); _dolink($link, $_[0])} |
| 184 |
|
|
sub textLIMG {'<a href="'.$_[0].'"><img src="'.$_[1].'" alt="'.$_[2].'" /></a>'} |
| 185 |
|
|
sub textLMG {'<a href="'.$_[0].'"><img src="'.$_[0].'" alt="'.$_[1].'" /></a>'} |
| 186 |
|
|
|
| 187 |
|
|
sub textPERSON {'[<a href="'.$H2H::Page::personuri. |
| 188 |
|
|
'#person_'.$_[0].'">'.$_[1].'</a>]'} |
| 189 |
|
|
|
| 190 |
|
|
sub textCOMMENT {'<!-- '.$_[0].' -->'} |
| 191 |
|
|
sub textCOMMENT2 {''} |
| 192 |
|
|
|
| 193 |
|
|
sub textRUBY {'<ruby><rb>'.$_[0].'</rb><rp>(</rp><rt>'.$_[1]. |
| 194 |
|
|
'</rt><rp>)</rp></ruby>'} |
| 195 |
|
|
sub textACRONYM {'<acronym title="'.$_[1].'">'.$_[0].'</acronym>'} |
| 196 |
|
|
sub textABBR {'<abbr title="'.$_[1].'">'.$_[0].'</abbr>'} |
| 197 |
|
|
|
| 198 |
|
|
sub textLDIARY {my ($y, $m, $d, $t) = @_; |
| 199 |
|
|
$m = substr('0'.$m,-2); $d = substr('0'.$d,-2); |
| 200 |
|
|
'<a href="'.$H2H::Page::uriuri."urn:x-suika.fam.cx:fuyubi:". |
| 201 |
|
|
"$y:$m:$d\">". |
| 202 |
|
|
$t.'</a>'} |
| 203 |
|
|
sub textLDIARY2 {my ($f, $t, $y, $m) = ($_[0], $_[1]); |
| 204 |
|
|
my ($d, $s, $ss, $ret); |
| 205 |
|
|
if ($f =~ /^(\d{4})(\d{2})(?:(\d{2})(?:i(\d{2})(?:s(\d{2}))?)?)?/) |
| 206 |
|
|
{($y, $m, $d, $s, $ss) = ($1, $2, $3, $4, $5)} |
| 207 |
|
|
$ret = '<a href="'.$H2H::Page::uriuri."urn:x-suika.fam.cx:fuyubi:". |
| 208 |
|
|
"$y:$m"; |
| 209 |
|
|
$ret .= ":$d" if $d; |
| 210 |
|
|
$ret .= ":$s" if $d && $s; |
| 211 |
|
|
$ret .= ":$ss" if $d && $s && $ss; |
| 212 |
|
|
$ret .= "\">${t}</a>"} |
| 213 |
|
|
sub textSEE {&textLDIARY2(@_)} |
| 214 |
|
|
|
| 215 |
|
|
sub _dolink { |
| 216 |
|
|
my ($href, $content, $title) = @_; |
| 217 |
|
|
my $ret; |
| 218 |
|
|
if ($href) { |
| 219 |
|
|
$ret = '<a href="'.$href.'"'; |
| 220 |
|
|
$ret.= $title ? ' title="'.$title.'">' : '>'; |
| 221 |
|
|
$ret.= $content.'</a>'; |
| 222 |
|
|
} else {$ret = $content} |
| 223 |
|
|
$ret =~ tr/\x0d\x0a//d; |
| 224 |
|
|
$ret; |
| 225 |
|
|
} |
| 226 |
|
|
|
| 227 |
|
|
sub _link2uri { |
| 228 |
|
|
my $link = shift; |
| 229 |
|
|
if ($link eq '.') { |
| 230 |
|
|
## Dummy. |
| 231 |
|
|
undef $link; |
| 232 |
|
|
} elsif ($link =~ /[({](\d{4}),?(\d{2}),?(\d{2})(?:[i,]?(\d{2})(?:[s,]?(\d{2}))?)?[)}]/) { |
| 233 |
|
|
## Diary |
| 234 |
|
|
my ($i, $s) = ($4, $5); |
| 235 |
|
|
$link = $H2H::Page::uriuri."urn:x-suika.fam.cx:fuyubi:$1:$2:$3"; |
| 236 |
|
|
$link.= ':'.$i if $i; |
| 237 |
|
|
$link.= ':'.$s if $i && $s; |
| 238 |
|
|
} elsif ($link =~ /\?[({]([A-Za-z0-9_.-]+)[}}]/) { |
| 239 |
|
|
## Glossary |
| 240 |
|
|
$link = $H2H::Page::glossaryuri.'#'.$1; |
| 241 |
|
|
} elsif ($link =~ /^urn:/i) { |
| 242 |
|
|
$link = $H2H::Page::uriuri.&Suika::CGI::Encode::uri($link); |
| 243 |
|
|
} |
| 244 |
|
|
$link; |
| 245 |
|
|
} |
| 246 |
|
|
|
| 247 |
|
|
package H2H::HnfFile; |
| 248 |
|
|
|
| 249 |
|
|
sub start {'<div class="day" id="'.$H2H::Command::prefix.'">'.$H2H::nl. |
| 250 |
|
|
'<h2><a href="'.$H2H::Page::uri.'#'.$H2H::Command::prefix. |
| 251 |
|
|
'" class="self"><img src="favicon" class="favicon" alt="¢£" title="ÅßÍͤ⤹¤Ê¤ë¡ùÆüµ¤È¤¤¤¦¤â¤Î¡£" /></a> '. |
| 252 |
|
|
$H2H::Command::d{y}.'ǯ'.$H2H::Command::d{m}.'·î'. |
| 253 |
|
|
$H2H::Command::d{d}.'Æü</h2>'. |
| 254 |
|
|
'<div class="header">'.$H2H::nl} |
| 255 |
|
|
sub endheader {'</div>'.$H2H::nl} |
| 256 |
|
|
sub end { |
| 257 |
|
|
<<EOH; |
| 258 |
|
|
<form class="postmsg" method="post" action="/~wakaba/sendmsg" accept-charset="junet, iso-2022-jp-3, iso-2022-jp"> |
| 259 |
|
|
<input type="hidden" name="subject" value="[Å߯ü] ${H2H::Command::d{y}}ǯ${H2H::Command::d{m}}·î${H2H::Command::d{d}}Æü" /> |
| 260 |
|
|
<strong class="itemname" title="µ¹¤·¤±¤ì¤Ð¡¢¡ÖÆÉ¤ó¤À¤è¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ²¼¤µ¤¤¡£´¶ÁÛ¤¬¤¢¤ë¤È¡¢Æüµ¤ò½ñ¤¯Îå¤ß(Ææ)¤Ë¤Ê¤ê¤Þ¤¹¡£">¸æ´¶ÁÛ</strong>: |
| 261 |
|
|
|
| 262 |
|
|
<span class="fs"> |
| 263 |
|
|
<label><input type="radio" name="f" value="5" />ºÇ¹â!</label> |
| 264 |
|
|
<label><input type="radio" name="f" value="4" />ÎÉ</label> |
| 265 |
|
|
<label><input type="radio" name="f" value="3" checked="checked" />ÉáÄÌ</label> |
| 266 |
|
|
<label><input type="radio" name="f" value="2" />°</label> |
| 267 |
|
|
<label><input type="radio" name="f" value="1" />ºÇÄã</label> |
| 268 |
|
|
</span> |
| 269 |
|
|
|
| 270 |
|
|
<label class="comments"><nobr>°ì¸À(¤â¤·¤¢¤ì¤Ð¡£): <input type="text" name="comment" value="" /></nobr></label> |
| 271 |
|
|
<label class="names"><nobr>̾Á°(¤è¤í¤·¤±¤ì¤Ð¡£): <input type="text" name="name" value="" /></nobr></label> |
| 272 |
|
|
|
| 273 |
|
|
<input type="submit" value="ÆÉ¤ó¤À¤è¡£" class="readsubmit" title="²¡¤·¤¿¤ê¤·¤Æ¤â²èÌ̤¬ÊѤï¤Ã¤¿¤ê¤Ï¶²¤é¤¯¤·¤Þ¤»¤ó¤¬¡¢ÌäÂꤢ¤ê¤Þ¤»¤ó¡£" /> |
| 274 |
|
|
</form> |
| 275 |
|
|
</div> |
| 276 |
|
|
EOH |
| 277 |
|
|
} |
| 278 |
|
|
|
| 279 |
|
|
sub headervar { |
| 280 |
|
|
my ($name, $val, $href) = @_; |
| 281 |
|
|
my $ret = $HNS::Hnf::UserVar::Templates{$name}; |
| 282 |
|
|
$val = '<a href="'.$href.'">'.$val.'</a>' if $href; |
| 283 |
|
|
$ret =~ s/\%value/$val/g; |
| 284 |
|
|
$ret = $H2H::Error::invalidheader.$name unless $ret; |
| 285 |
|
|
if ($name eq 'TENKI') { |
| 286 |
|
|
$ret =~ s#&hare;#<img src="hare" class="xbm_font" alt="¦è" />#g; |
| 287 |
|
|
$ret =~ s#&kumori;#<img src="kumori" class="xbm_font" alt="¦é" />#g; |
| 288 |
|
|
$ret =~ s#&ame;#<img src="ame" class="xbm_font" alt="¦ê" />#g; |
| 289 |
|
|
$ret =~ s#&yuki;#<img src="yuki" class="xbm_font" alt="¦ë" />#g; |
| 290 |
|
|
} |
| 291 |
|
|
'<span class="var '.$name.'">'.$ret.'</span>'; |
| 292 |
|
|
} |
| 293 |
|
|
sub footnote { |
| 294 |
|
|
return unless $H2H::Command::fn; |
| 295 |
|
|
my $ret = '<ol class="footnote">'.$H2H::Command::fn.'</ol>'; |
| 296 |
|
|
undef $H2H::Command::fn; $ret; |
| 297 |
|
|
} |
| 298 |
|
|
|
| 299 |
|
|
sub tree {'<ol class="tree">'.$tree.'</ol>' if $tree} |
| 300 |
|
|
|
| 301 |
|
|
|
| 302 |
|
|
package H2H::Error; |
| 303 |
|
|
$invalidheader = 'ÉÔÀµ¤ÊÍøÍѼÔÊÑ¿ô¤Ç¤¹: '; |
| 304 |
|
|
|
| 305 |
|
|
|
| 306 |
|
|
package Suika::CGI::Encode; |
| 307 |
|
|
|
| 308 |
|
|
sub uri { |
| 309 |
|
|
my $s = shift; |
| 310 |
|
|
$s =~ s/([^A-Za-z0-9_@.-])/sprintf('%%%02X', ord($1))/eg; |
| 311 |
|
|
$s; |
| 312 |
|
|
} |
| 313 |
|
|
|
| 314 |
|
|
1; |