<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/xml.xsl"?>
<document xml:lang="en">
	<header>
		<title>Color code</title>
		<description>マークアップされたコードに色を付けるサンプル</description>
	</header>
	<body>
		<section>
			<h>Description</h>
			<p>class に言語を書くことによって言語を明示し、Javascript (クライアント側) でコードに色を付けてみるテスト</p>
			<p>このサイト用のスクリプトでは pre (現状 blockcode の代わり的なもの) と code (インライン) についてやってみてる。</p>
		</section>
		<section>
			<h>Examples (and test)</h>
			<p>インライン <code class="Ruby">Digest::MD5.hexdigest("str").hex</code>, <code class="XML">&lt;pre&gt;&lt;![CDATA[&lt;foo&gt;&lt;/foo&gt;]]&gt;&lt;/pre&gt;</code></p>

			<section>
				<h><abbr>XML</abbr></h>
				<pre class="XML"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/xml.xsl"?>
<!DOCTYPE diary SYSTEM "taglibro.dtd">
<diary xml:lang="ja" xmlns="http://lowreal.net/d/">
    <day date="2004-12-01">
        <section datetime="2004-12-01T03:26:57+09:00">
            <title>Namazu</title>
            <!--<cat>web</cat>
            <cat>soft</cat>-->
            <body>
                <p>なんだか今度は <q>Done</q> ま...</p>
                <p>正確には追加されてるみ...</p>
                <pre>]]>&lt;![CDATA[&lt;?xml-stylesheet type=&quot;text/xsl&quot; href=&quot;/xml.xsl&quot;?&gt;]]&gt;<![CDATA[</pre>
            </body>
        </section>
    </day>
</diary>]]></pre>
			</section>
			<section>
				<h>Ruby</h>
				<pre class="Ruby"><![CDATA[#!/usr/local/bin/ruby

require "cgi"
@cgi = CGI.new

# test
:symbol; :"symbol"; :$symbol; :@@symbol; :+
@@class_variable; @instance_variable; $global_variable; $_; $&

foo = <<EOS
fdlbfdkb
gfjlkvfdkl
""bvlsdlkjvsdEOS
dfb''EOS
EOS

Foo.instance_method(:foo).call
# => -:5:in

?a; ?\C-a

%q!I said, "You said, 'She said it.'"!
%!I said, "You said, 'She sa\!id it.'"!
%Q('This is it.'\n)
%Q{'This is it.'\n}
%Q<'This <is> it.'\n> # 括弧は一重まで
#%Q<'Thi<s <is> i>t.'\n> # 括弧は一重まで
#%Q<'Thi<<s <is> i>>t.'\n> # 括弧は一重まで

begin
    # body
rescue => e
    puts @cgi.header({"type" => "text/plain"})
    puts e.message
    puts e.backtrace
end]]></pre>
			</section>
			<section>
				<h>ECMAScript</h>
				<p>Javascript, JScript, ActionScript も同じ</p>
				<pre class="ECMAScript"><![CDATA[/*
 * グローバルな初期化関数。
 * 全てがロードされたら実行される。
 */
function initialize() {
    addInsDelDatetime();
    addBlockquoteCite();
    addQCite();
    addListTitle();
    // document.implementation.hasFeature("StyleSheets", "2.0");
    if (document.styleSheets) enumStyleSheets();
    markupCode();
}
window.addEventListener("load", initialize, true);
]]></pre>
			</section>
			<section>
				<h><abbr>CSS</abbr></h>
				<pre class="CSS"><![CDATA[@charset "utf-8";

/*
 * another-morning.css
 * (c) 2004-11-23 cho45(砂糖)
 * http://lowreal.net/
 *
 */

html {
    height: 100%;
    background: #036 url("/img/am_bg");
    color: #333;
}

body {
    padding: 13px 6.25% 0 6.25% !important;
    background: transparent url("/img/am_bg");
}
]]></pre>
			</section>
			<section>
				<h><abbr>PHP</abbr></h>
				<pre class="PHP"><![CDATA[// Content-Type の設定と flavor のやつをやっちまいます。
$content_type = $default_content_type;
if ($flavor && $flavor != "") {
    if (file_exists("$xsl.$flavor.xsl")) {
        $xsl .= ".$flavor";
        if (array_key_exists($flavor, $flavor_content_type)) {
            $content_type = $flavor_content_type[$flavor];
        }
    }
    $params["flavor"] = ".$flavor";
}]]></pre>
			</section>
			<section>
				<h>Io</h>
				<pre class="Io"><![CDATA[Object p := method(
    self print
    write("\n")
    self
)

// replace findRegexString by the value returned from aBlock
String gsubByBlock := method(findRegexString, aBlock,
    r := Regex clone setPattern(findRegexString) setString(self)
    r allMatches foreach(i, v,
        if (v type != "List", v := list(v))
        rep := aBlock(v)
        self := self replace(v at(0), rep)
    )
    self
)

ret := "あああ" gsubByBlock("[^ a-zA-Z0-9_.-]+",
    block(match,
        ret := ""
        match at(0) foreach(i, v,
            ret := ret .. "%" .. v asString toBase(16)
        )
    )
) replace(" ", "+") p

if (ifobj) = ""

"""
aaaaaa
""" print]]></pre>
			</section>
			<section>
				<h>Perl</h>
				<pre class="Perl"><![CDATA[
$days               # 単純なスカラ変数 "days" の値
$days[28]           # 配列 @days の 29 番目の要素の値
$days{'Feb'}        # ハッシュ %days の 'Feb' の値
$#days              # 配列 @days の最後のインデクス値

@days               # ($days[0], $days[1],..., $days[n])
@days[3,4,5]        # @days[3..5] と同じ
@days{'a','c'}      # ($days{'a'},$days{'c'}) と同じ

%days               # (key1, val1, key2, val2,...)

LINE: while (<STDIN>) {
    while (s|({.*}.*){.*}|$1 |) {}
    s|{.*}| |;
    if (s|{.*| |) {
        $front = $_;
        while (<STDIN>) {
            if (/}/) {      # コメントの終わり
                s|^|$front{|;
                redo LINE;
            }
        }
    }
    print;
}

sub require {
    local($filename) = @_;
    return 1 if $INC{$filename};
    local($realfilename,$result);
    ITER: {
        foreach $prefix (@INC) {
            $realfilename = "$prefix/$filename";
            if (-f $realfilename) {
                $result = do $realfilename;
                last ITER;
            }
        }
        die "Can't find $filename in \@INC";
    }
    die $@ if $@;
    die "$filename did not return true value" unless $result;
    $INC{$filename} = $realfilename;
    $result;
}

$pwd = (getpwuid($<))[1];
$salt = substr($pwd, 0, 2);

system "stty -echo";
print "Password: ";
chop($word = <STDIN>);
print "\n";
system "stty echo";

if (crypt($word, $salt) ne $pwd) {
    die "Sorry...\n";
} else {
    print "ok\n";
}]]></pre>
			</section>
		</section>
	</body>
</document>
