OSDN Git Service

Initial version of Grass.
authorTaku Amano <taku@toi-planning.net>
Sun, 26 Apr 2009 06:05:26 +0000 (15:05 +0900)
committerTaku Amano <taku@toi-planning.net>
Sun, 26 Apr 2009 06:05:26 +0000 (15:05 +0900)
33 files changed:
Build.PL [new file with mode: 0644]
LICENSE [new file with mode: 0644]
MANIFEST [new file with mode: 0644]
MANIFEST.SKIP [new file with mode: 0644]
config.yaml [new file with mode: 0644]
lib/Grass/L10N.pm [new file with mode: 0644]
lib/Grass/L10N/en_us.pm [new file with mode: 0644]
lib/Grass/L10N/ja.pm [new file with mode: 0644]
tmpl/abs.mtml [new file with mode: 0644]
tmpl/app.mtml [new file with mode: 0644]
tmpl/char.mtml [new file with mode: 0644]
tmpl/char_code.mtml [new file with mode: 0644]
tmpl/church_false.mtml [new file with mode: 0644]
tmpl/church_true.mtml [new file with mode: 0644]
tmpl/comment_preview.mtml [new file with mode: 0644]
tmpl/comment_response.mtml [new file with mode: 0644]
tmpl/concatinate.mtml [new file with mode: 0644]
tmpl/duplicate.mtml [new file with mode: 0644]
tmpl/dynamic_error.mtml [new file with mode: 0644]
tmpl/echo.mtml [new file with mode: 0644]
tmpl/fn.mtml [new file with mode: 0644]
tmpl/grass.mtml [new file with mode: 0644]
tmpl/hello_world_initial_version.mtml [new file with mode: 0644]
tmpl/hello_world_short_version.mtml [new file with mode: 0644]
tmpl/in.mtml [new file with mode: 0644]
tmpl/inversion.mtml [new file with mode: 0644]
tmpl/new_array.mtml [new file with mode: 0644]
tmpl/out.mtml [new file with mode: 0644]
tmpl/parse.mtml [new file with mode: 0644]
tmpl/popup_image.mtml [new file with mode: 0644]
tmpl/print.mtml [new file with mode: 0644]
tmpl/search_results.mtml [new file with mode: 0644]
tmpl/succ.mtml [new file with mode: 0644]

diff --git a/Build.PL b/Build.PL
new file mode 100644 (file)
index 0000000..cad1022
--- /dev/null
+++ b/Build.PL
@@ -0,0 +1,119 @@
+use strict;
+use warnings;
+use Module::Build;
+use File::Spec;
+use File::Basename;
+use YAML qw/ Load /;
+
+my $class = Module::Build->subclass(
+       class => 'MTToiplanPluginDirectoryBuilder',
+       code => q{
+               # Don't make blib
+               # sub ACTION_code {};
+               # Don't make blib
+               sub ACTION_docs {};
+               # Don't make META.yml
+               sub ACTION_distmeta {
+                       # no warning on ACTION_distdir
+                       $_[0]->{metafile} = 'MANIFEST';
+               };
+               # Don't add MEATA.yml to MANIFEST
+               sub ACTION_manifest {
+                       $_[0]->{metafile} = 'MANIFEST',
+                       $_[0]->SUPER::ACTION_manifest(@_);
+               };
+               sub ACTION_test {
+                       my $p = $_[0]->{properties};
+                       unshift(
+                               @INC,
+                               File::Spec->catdir($p->{base_dir}, 'extlib'),
+                               File::Spec->catdir($p->{base_dir}, '../../lib'),
+                               File::Spec->catdir($p->{base_dir}, '../../extlib'),
+                       );
+
+                       $_[0]->SUPER::ACTION_test(@_);
+               };
+               sub ACTION_upload_google {
+                       my ($self) = @_;
+                       my $prj = 'toiplan-mtplugin-directory';
+                       my $ver = $self->dist_version;
+                       my $dist_dir = $self->dist_dir;
+                       my $name = $self->dist_name;
+
+                       $self->depends_on('dist');
+                       #$self->_call_action('distdir');
+                       $self->ACTION_distdir;
+                       $self->depends_on('zipdist');
+                       system(
+                               "googlecode_upload.py -s 'Release $ver (TGZ)' -p $prj -l $name $dist_dir.tar.gz"
+                       );
+                       system(
+                               "googlecode_upload.py -s 'Release $ver (ZIP)' -p $prj -l $name $dist_dir.zip"
+                       );
+                       unlink("$dist_dir.tar.gz");
+                       unlink("$dist_dir.zip");
+               };
+
+               sub ACTION_zipdist {
+                       my ($self) = @_;
+                       my $dist_dir = $self->dist_dir;
+                       $self->depends_on('distdir');
+                       print "Creating $dist_dir.zip\n";
+                       system("zip -r $dist_dir.zip $dist_dir") == 0 or die $?;
+                       $self->delete_filetree($dist_dir);
+               }
+
+               sub ACTION_distdir {
+                       my ($self) = @_;
+
+                       $_[0]->SUPER::ACTION_distdir(@_);
+
+                       my $dist_dir = $self->dist_dir;
+                       rename($dist_dir, $self->{properties}{dist_name});
+                       use File::Path;
+                       use File::Spec;
+                       use File::Basename;
+                       my $plugins = File::Spec->catfile($dist_dir, 'plugins');
+                       mkpath($plugins, 1, 0755);
+
+                       my $static = File::Spec->catfile($dist_dir, 'mt-static/plugins');
+                       mkpath($static, 1, 0755);
+
+                       my $new_dist_dir = File::Spec->catfile(
+                               $plugins, $self->{properties}{dist_name}
+                       );
+                       rename($self->{properties}{dist_name}, $new_dist_dir);
+
+                       foreach my $f (glob(File::Spec->catfile($new_dist_dir, 'LIC*'))) {
+                               rename($f, File::Spec->catfile($dist_dir, basename($f)));
+                       }
+
+                       if (my @statics = glob(File::Spec->catfile($new_dist_dir, 'static/*'))) {
+                               my $d = File::Spec->catfile($static, $self->{properties}{dist_name});
+                               mkpath($d, 1, 0755);
+                               foreach my $f (@statics) {
+                                       rename($f, File::Spec->catfile($d, basename($f)));
+                               }
+                       }
+               }
+       }
+);
+
+my $yaml_string = do {
+       open(my $fh, File::Spec->catfile(dirname(__FILE__), 'config.yaml'));
+       local $/;
+       <$fh>
+};
+$yaml_string =~ s/^(\s*)\*/$1App::\*/gm;
+my $yaml = Load($yaml_string);
+
+my $builder = $class->new(
+       dist_name           => $yaml->{name},
+    dist_author         => 'Movable Type ACME Plugin Project',
+    dist_version        => $yaml->{version},
+    module_name         => $yaml->{name} . '::App',
+    license             => 'MIT License',
+    add_to_cleanup      => [ $yaml->{name} . '-*' ],
+);
+
+$builder->create_build_script();
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..d8912de
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+Grass - A implementation of Grass interpreter by pure MTML.
+
+Copyright (c) 2008 Movable Type ACME Plugin Project, All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/MANIFEST b/MANIFEST
new file mode 100644 (file)
index 0000000..dd92fd2
--- /dev/null
+++ b/MANIFEST
@@ -0,0 +1,30 @@
+config.yaml
+lib/Grass/L10N.pm
+lib/Grass/L10N/en_us.pm
+lib/Grass/L10N/ja.pm
+LICENSE
+tmpl/abs.mtml
+tmpl/app.mtml
+tmpl/char.mtml
+tmpl/char_code.mtml
+tmpl/church_false.mtml
+tmpl/church_true.mtml
+tmpl/comment_preview.mtml
+tmpl/comment_response.mtml
+tmpl/concatinate.mtml
+tmpl/duplicate.mtml
+tmpl/dynamic_error.mtml
+tmpl/echo.mtml
+tmpl/fn.mtml
+tmpl/grass.mtml
+tmpl/hello_world_initial_version.mtml
+tmpl/hello_world_short_version.mtml
+tmpl/in.mtml
+tmpl/inversion.mtml
+tmpl/new_array.mtml
+tmpl/out.mtml
+tmpl/parse.mtml
+tmpl/popup_image.mtml
+tmpl/print.mtml
+tmpl/search_results.mtml
+tmpl/succ.mtml
diff --git a/MANIFEST.SKIP b/MANIFEST.SKIP
new file mode 100644 (file)
index 0000000..ec6d23b
--- /dev/null
@@ -0,0 +1,48 @@
+^MANIFEST
+\bBuild.PL$
+#^Makefile
+#^META.yml$
+#^blib/
+#~$
+
+
+# Avoid version control files.
+\bRCS\b
+\bCVS\b
+,v$
+\B\.svn\b
+\B\.cvsignore$
+\B.git
+
+# Avoid Makemaker generated and utility files.
+\bMakefile$
+\bblib
+\bMakeMaker-\d
+\bpm_to_blib$
+\bblibdirs$
+^MANIFEST\.SKIP$
+
+# Avoid Module::Build generated and utility files.
+\bBuild$
+\bBuild.bat$
+\b_build
+
+# Avoid Devel::Cover generated files
+\bcover_db
+
+# Avoid temp and backup files.
+~$
+\.tmp$
+\.old$
+\.bak$
+\#$
+\.#
+\.rej$
+
+# Avoid OS-specific files/dirs
+#   Mac OSX metadata
+\B\.DS_Store
+#   Mac OSX SMB mount metadata files
+\B\._
+# Avoid archives of this distribution
+\bArchiveUploader-[\d\.\_]+
diff --git a/config.yaml b/config.yaml
new file mode 100644 (file)
index 0000000..32b6ef9
--- /dev/null
@@ -0,0 +1,93 @@
+# Copyright (c) 2008 Movable Type ACME Plugin Project, All rights reserved.
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+# plugin name
+name: Grass
+version: 0.0.1
+
+# about this plugin
+description: <__trans phrase="A implementation of Grass interpreter by pure MTML.">
+author_name: <__trans phrase="Movable Type ACME Plugin Project">
+author_link: http://mt-acme.sourceforge.jp/
+plugin_link: http://mt-acme.sourceforge.jp/grass/
+doc_link: http://mt-acme.sourceforge.jp/grass/
+
+# localization
+l10n_class: Grass::L10N
+
+template_sets:
+  grass_interpreter:
+    label: Grass
+    base_path: tmpl
+    order: 9999
+    templates:
+      index:
+        hello_world_initial_version:
+          label: Hello, world! - Initial version
+          outfile: hello-world-initial.html
+          rebuild_me: 1
+        hello_world_short_version:
+          label: Hello, world! - Short version
+          outfile: hello-world-short.html
+          rebuild_me: 1
+        echo:
+          label: Echo
+          outfile: echo.html
+          rebuild_me: 1
+      individual:
+      archive:
+      module:
+        grass:
+          label: grass
+        app:
+          label: app
+        char_code:
+          label: char_code
+        inversion:
+          label: inversion
+        abs:
+          label: abs
+        duplicate:
+          label: duplicate
+        fn:
+          label: fn
+        in:
+          label: in
+        char:
+          label: char
+        succ:
+          label: succ
+        out:
+          label: out
+        print:
+          label: print
+        concatinate:
+          label: concatinate
+        church_true:
+          label: church_true
+        church_false:
+          label: church_false
+        parse:
+          label: parse
+        new_array:
+          label: new_array
+      widget:
+      widgetset:
+      system:
diff --git a/lib/Grass/L10N.pm b/lib/Grass/L10N.pm
new file mode 100644 (file)
index 0000000..b76acc5
--- /dev/null
@@ -0,0 +1,25 @@
+# Copyright (c) 2008 Movable Type ACME Plugin Project, All rights reserved.
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Grass::L10N;
+use strict;
+use base 'MT::Plugin::L10N';
+
+1;
diff --git a/lib/Grass/L10N/en_us.pm b/lib/Grass/L10N/en_us.pm
new file mode 100644 (file)
index 0000000..4460367
--- /dev/null
@@ -0,0 +1,29 @@
+# Copyright (c) 2008 Movable Type ACME Plugin Project, All rights reserved.
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Grass::L10N::en_us;
+
+use strict;
+
+use base 'Grass::L10N';
+use vars qw( %Lexicon );
+%Lexicon = ();
+
+1;
diff --git a/lib/Grass/L10N/ja.pm b/lib/Grass/L10N/ja.pm
new file mode 100644 (file)
index 0000000..4cbc69b
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright (c) 2008 Movable Type ACME Plugin Project, All rights reserved.
+# 
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+# 
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+# THE SOFTWARE.
+
+package Grass::L10N::ja;
+
+use strict;
+use base 'Grass::L10N::en_us';
+use vars qw( %Lexicon );
+
+%Lexicon = (
+       'A implementation of Grass interpreter by pure MTML.' =>
+       'MTMLのみによるプログラミング言語 Grass の評価器の実装です',
+);
+
+1;
diff --git a/tmpl/abs.mtml b/tmpl/abs.mtml
new file mode 100644 (file)
index 0000000..066d4e1
--- /dev/null
@@ -0,0 +1,23 @@
+<mt:SetVar name="tmp_abs{class}" value="abs" />
+<mt:SetVar name="tmp_abs{body}" value="$body" />
+<mt:SetVar name="$name" value="$tmp_abs" />
+<mt:SetVar name="tmp_abs" function="undef" />
+
+<mt:Unless name="abs::defined">
+<mt:SetVar name="abs::defined" value="1" />
+
+<mt:SetVarTemplate name="abs::eval">
+
+<mt:Var name="self{machine}" setvar="tmp_abs_machine" />
+<mt:Var name="tmp_abs_machine{env}" setvar="tmp_abs_env" />
+<mt:Var name="self{body}" setvar="tmp_abs_body" />
+<mt:Include module="duplicate" name="tmp_abs_env_dup" array="$tmp_abs_env" />
+<mt:Include
+       module="fn" name="tmp_abs_fn"
+       code="$tmp_abs_body" env="$tmp_abs_env_dup"
+/>
+
+<mt:SetVar name="tmp_abs_env" function="push" value="$tmp_abs_fn" />
+</mt:SetVarTemplate>
+
+</mt:Unless>
diff --git a/tmpl/app.mtml b/tmpl/app.mtml
new file mode 100644 (file)
index 0000000..018d0ae
--- /dev/null
@@ -0,0 +1,30 @@
+<mt:Include module="inversion" name="m" />
+<mt:Include module="inversion" name="n" />
+<mt:SetVar name="tmp_app{class}" value="app" />
+<mt:SetVar name="tmp_app{m}" value="$m" />
+<mt:SetVar name="tmp_app{n}" value="$n" />
+<mt:SetVar name="$name" value="$tmp_app" />
+<mt:SetVar name="tmp_app" function="undef" />
+
+<mt:Unless name="app::defined">
+<mt:SetVar name="app::defined" value="1" />
+
+<mt:SetVarTemplate name="app::eval">
+
+<mt:Var name="self{machine}" setvar="tmp_app_machine" />
+<mt:Var name="tmp_app_machine{env}" setvar="tmp_app_env" />
+<mt:Var name="self{m}" setvar="tmp_app_m" />
+<mt:Var name="self{n}" setvar="tmp_app_n" />
+
+<mt:Var name="tmp_app_env" index="$tmp_app_m" setvar="f" />
+<mt:Var name="tmp_app_env" index="$tmp_app_n" setvar="v" />
+
+<mt:SetVar name="f{machine}" value="$tmp_app_machine" />
+<mt:SetVar name="f{arg}" value="$v" />
+<mt:SetVar name="self" value="$f" />
+<mt:SetVarBlock name="method"><mt:Var name="f{class}" />::app</mt:SetVarBlock>
+<mt:Var name="$method" />
+
+</mt:SetVarTemplate>
+
+</mt:Unless>
diff --git a/tmpl/char.mtml b/tmpl/char.mtml
new file mode 100644 (file)
index 0000000..ef30c8f
--- /dev/null
@@ -0,0 +1,28 @@
+<mt:SetVar name="tmp_char{class}" value="char" />
+<mt:SetVar name="tmp_char{char_code}" value="$char_code" />
+<mt:SetVar name="$name" value="$tmp_char" />
+<mt:SetVar name="tmp_char" function="undef" />
+
+<mt:Unless name="char::defined">
+<mt:SetVar name="char::defined" value="1" />
+
+<mt:SetVarTemplate name="char::app">
+<mt:Var name="self{machine}" setvar="tmp_char_machine" />
+<mt:Var name="self{arg}" setvar="tmp_char_char" />
+<mt:Var name="self{char_code}" setvar="tmp_char_char_code" />
+<mt:Var name="tmp_char_char{char_code}" setvar="tmp_char_char_char_code" />
+
+<mt:Var name="tmp_char_machine{code}" setvar="tmp_char_code" />
+<mt:Var name="tmp_char_machine{env}" setvar="tmp_char_env" />
+<mt:Var name="tmp_char_machine{dump}" setvar="tmp_char_dump" />
+
+<mt:If name="tmp_char_char_code" eq="$tmp_char_char_char_code">
+       <mt:Include module="church_true" name="tmp_char_ret" />
+<mt:Else>
+       <mt:Include module="church_false" name="tmp_char_ret" />
+</mt:If>
+
+<mt:SetVar name="tmp_char_env" function="push" value="$tmp_char_ret" />
+</mt:SetVarTemplate>
+
+</mt:Unless>
diff --git a/tmpl/char_code.mtml b/tmpl/char_code.mtml
new file mode 100644 (file)
index 0000000..4a661b1
--- /dev/null
@@ -0,0 +1,107 @@
+<mt:Unless name="char_code_chars">
+<mt:SetVarBlock name="char_code_chars[9]">     </mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[10]">newline</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[32]"> </mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[33]">!</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[34]">"</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[35]">#</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[36]">$</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[37]">%</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[38]">&</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[39]">'</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[40]">(</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[41]">)</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[42]">*</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[43]">+</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[44]">,</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[45]">-</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[46]">.</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[47]">/</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[48]">0</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[49]">1</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[50]">2</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[51]">3</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[52]">4</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[53]">5</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[54]">6</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[55]">7</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[56]">8</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[57]">9</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[58]">:</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[59]">;</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[60]"><</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[61]">=</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[62]">></mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[63]">?</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[64]">@</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[65]">A</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[66]">B</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[67]">C</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[68]">D</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[69]">E</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[70]">F</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[71]">G</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[72]">H</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[73]">I</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[74]">J</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[75]">K</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[76]">L</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[77]">M</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[78]">N</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[79]">O</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[80]">P</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[81]">Q</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[82]">R</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[83]">S</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[84]">T</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[85]">U</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[86]">V</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[87]">W</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[88]">X</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[89]">Y</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[90]">Z</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[91]">[</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[92]">\</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[93]">]</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[94]">^</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[95]">_</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[96]">`</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[97]">a</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[98]">b</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[99]">c</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[100]">d</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[101]">e</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[102]">f</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[103]">g</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[104]">h</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[105]">i</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[106]">j</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[107]">k</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[108]">l</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[109]">m</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[110]">n</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[111]">o</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[112]">p</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[113]">q</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[114]">r</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[115]">s</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[116]">t</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[117]">u</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[118]">v</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[119]">w</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[120]">x</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[121]">y</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[122]">z</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[123]">{</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[124]">|</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[125]">}</mt:SetVarBlock>
+<mt:SetVarBlock name="char_code_chars[126]">~</mt:SetVarBlock>
+</mt:Unless>
+
+<mt:Var name="char" regex_replace="/\r\n|\r|\n/","newline" setvar="char" />
+<mt:For var="i" from="0" to="126">
+<mt:Var name="char_code_chars" index="$i" setvar="tmp_char_code_char" />
+<mt:If name="tmp_char_code_char" eq="$char">
+<mt:SetVar name="$name" value="$i" />
+</mt:If>
+</mt:For>
diff --git a/tmpl/church_false.mtml b/tmpl/church_false.mtml
new file mode 100644 (file)
index 0000000..2115478
--- /dev/null
@@ -0,0 +1,7 @@
+<mt:SetVar name="tmp_chfalse_name" value="$name" />
+<mt:Include module="new_array" name="tmp_chfalse_body" />
+<mt:Include module="new_array" name="tmp_chfalse_env" />
+<mt:Include module="abs" name="tmp_chfalse_abs" body="$tmp_chfalse_body" />
+<mt:SetVar name="tmp_chfalse_abs_list" function="push" value="$tmp_chfalse_abs" />
+
+<mt:Include module="fn" name="$tmp_chfalse_name" code="$tmp_chfalse_abs_list" env="$tmp_chfalse_env" />
diff --git a/tmpl/church_true.mtml b/tmpl/church_true.mtml
new file mode 100644 (file)
index 0000000..358ea25
--- /dev/null
@@ -0,0 +1,13 @@
+<mt:SetVar name="tmp_chtrue_name" value="$name" />
+<mt:Include module="app" name="tmp_chtrue_app" m="3" n="2" />
+<mt:SetVar name="tmp_chtrue_app_list" function="push" value="$tmp_chtrue_app" />
+<mt:Include module="abs" name="tmp_chtrue_abs" body="$tmp_chtrue_app_list" />
+<mt:SetVar name="tmp_chtrue_abs_list" function="push" value="$tmp_chtrue_abs" />
+
+<mt:Include module="new_array" name="tmp_chtrue_code" />
+<mt:Include module="new_array" name="tmp_chtrue_env" />
+
+<mt:Include module="fn" name="tmp_chtrue_fn" code="$tmp_chtrue_code" env="$tmp_chtrue_env" />
+<mt:SetVar name="tmp_chtrue_fn_list" function="push" value="$tmp_chtrue_fn" />
+
+<mt:Include module="fn" name="$tmp_chtrue_name" code="$tmp_chtrue_abs_list" env="$tmp_chtrue_fn_list" />
diff --git a/tmpl/comment_preview.mtml b/tmpl/comment_preview.mtml
new file mode 100644 (file)
index 0000000..1c69f39
--- /dev/null
@@ -0,0 +1,120 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <script type="text/javascript">
+    /* <![CDATA[ */
+    var user = <$mt:UserSessionState$>;
+    var is_preview = true;
+    /* ]]> */
+    </script>
+    <$mt:Include module="HTMLヘッダー"$>
+    <title><$mt:BlogName encode_html="1"$>: コメントの確認</title>
+</head>
+<body id="<$mt:BlogTemplateSetID$>" class="mt-comment-preview <$mt:Var name="page_layout"$>" onload="mtEntryOnLoad()" onunload="mtEntryOnUnload()">
+    <div id="container">
+        <div id="container-inner">
+
+
+            <$mt:Include module="バナーヘッダー"$>
+
+
+            <div id="content">
+                <div id="content-inner">
+
+
+                    <div id="alpha">
+                        <div id="alpha-inner">
+
+
+                            <h1 id="page-title"><$mt:Var name="page_title"$></h1>
+
+
+<mt:Ignore><!-- Comment Preview --></mt:Ignore>
+                            <div class="comment" id="comment-<$mt:CommentID$>">
+                                <div class="inner">
+                                    <div class="comment-header">
+                                        <div class="asset-meta">
+                                            <span class="byline">
+                                                <$mt:CommentAuthorIdentity$>
+    <mt:IfCommentParent>
+                                                <span class="vcard author"><$mt:CommentAuthorLink$></span>から<a href="<mt:CommentParent><$mt:CommentLink$></mt:CommentParent>"><mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent></a>への返信
+    <mt:Else>
+                                                <span class="vcard author"><$mt:CommentAuthorLink$></span>
+    </mt:IfCommentParent>
+                                                | <a href="<$mt:CommentLink$>"><abbr class="published" title="<$mt:CommentDate format_name="iso8601"$>"><$mt:CommentDate$></abbr></a>
+                                            </span>
+                                        </div>
+                                    </div>
+                                    <div class="comment-content">
+                                        <$mt:CommentBody$>
+                                    </div>
+                                </div>
+                            </div>
+
+
+<mt:Ignore><!-- Comment Form --></mt:Ignore>
+                            <div class="comments-open" id="comments-open">
+                                <h2 class="comments-open-header">コメントする</h2>
+                                <div class="comments-open-content">
+                                    <div id="comment-greeting"></div>
+                                    <form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="comments_form" id="comments-form" onsubmit="return mtCommentOnSubmit(this)">
+                                        <input type="hidden" name="static" value="1" />
+                                        <input type="hidden" name="armor" value="1" />
+                                        <input type="hidden" name="preview" value="" />
+                                        <input type="hidden" name="entry_id" value="<$mt:EntryID$>" />
+                                        <input type="hidden" name="__lang" value="<$mt:BlogLanguage$>" />
+<mt:IfCommentParent>
+                                            <input type="hidden" name="parent_id" value="<$mt:CommentParentID escape="html"$>" id="comment-parent-id">
+</mt:IfCommentParent>
+                                        <div id="comments-open-data">
+                                            <div id="comment-form-name">
+                                                <label for="comment-author">名前</label>
+                                                <input id="comment-author" name="author" size="30" value="<$mt:CommentAuthor encode_html="1"$>" onfocus="mtShowCaptcha()" />
+                                            </div>
+                                            <div id="comment-form-email">
+                                                <label for="comment-email">電子メール</label>
+                                                <input id="comment-email" name="email" size="30" value="<$mt:CommentEmail encode_html="1"$>" onfocus="mtShowCaptcha()" />
+                                            </div>
+                                            <div id="comment-form-url">
+                                                <label for="comment-url">URL</label>
+                                                <input id="comment-url" name="url" size="30" value="<$mt:CommentURL encode_html="1"$>" onfocus="mtShowCaptcha()" />
+                                            </div>
+                                        </div>
+<mt:IfCommentParent>
+                                        <div id="comment-form-reply">
+                                            <input type="checkbox" id="comment-reply" name="comment_reply" value="<$mt:CommentParentID escape="html"$>" checked="checked" onclick="mtSetCommentParentID()" />
+                                            <label for="comment-reply" id="comment-reply-label"><mt:CommentParent><$mt:CommentAuthor$></mt:CommentParent>からのコメントに返信</label>
+                                        </div>
+</mt:IfCommentParent>
+                                        <div id="comments-open-text">
+                                            <label for="comment-text">コメント <mt:IfAllowCommentHTML>(スタイル用のHTMLタグを使えます)</mt:IfAllowCommentHTML></label>
+                                            <textarea id="comment-text" name="text" rows="15" cols="50" onfocus="mtShowCaptcha()"><$mt:CommentBody autolink="0" sanitize="0" convert_breaks="0" encode_html="1"$></textarea>
+                                        </div>
+                                        <div id="comments-open-captcha"></div>
+                                        <div id="comments-open-footer">
+                                            <input type="submit" accesskey="v" name="preview_button" id="comment-preview" value="確認" onclick="this.form.preview.value='1';" />
+                                            <input type="submit" accesskey="s" name="post" id="comment-submit" value="投稿" />
+                                            <input type="button" name="cancel" id="comment-cancel" value="キャンセル" onclick="window.location='<$mt:EntryPermalink$>'" />
+                                        </div>
+                                    </form>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+
+                    <$mt:Include module="サイドバー"$>
+
+
+                </div>
+            </div>
+
+
+            <$mt:Include module="バナーフッター"$>
+
+
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tmpl/comment_response.mtml b/tmpl/comment_response.mtml
new file mode 100644 (file)
index 0000000..358c6d9
--- /dev/null
@@ -0,0 +1,59 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+
+
+<mt:If name="comment_confirmation">
+    <mt:Ignore><!-- Success message when comment has been submitted --></mt:Ignore>
+    <$mt:Var name="page_title" value="確認"$>
+    <$mt:Var name="message" value="<p>コメントを投稿しました。</p>"$>
+<mt:Else name="comment_pending">
+    <mt:Ignore><!-- Pending message when comment is being held for review --></mt:Ignore>
+    <$mt:Var name="page_title" value="コメントありがとうございます。"$>
+    <$mt:Var name="message" value="<p>コメントは現在承認されるまで公開を保留されています。</p>"$>
+<mt:Else name="comment_error">
+    <mt:Ignore><!-- Error message when comment submission fails --></mt:Ignore>
+    <$mt:Var name="page_title" value="コメント投稿エラー"$>
+    <mt:SetVarBlock name="message"><p>コメントを投稿できませんでした。エラー: <$mt:ErrorMessage$></p></mt:SetVarBlock>
+</mt:If>
+
+
+    <$mt:Include module="HTMLヘッダー"$>
+    <title><$mt:BlogName encode_html="1"$>: <$mt:Var name="page_title"$></title>
+</head>
+<body id="<$mt:BlogTemplateSetID$>" class="<$mt:Var name="body_class"$> <$mt:Var name="page_layout"$>">
+    <div id="container">
+        <div id="container-inner">
+
+
+            <$mt:Include module="バナーヘッダー"$>
+
+
+            <div id="content">
+                <div id="content-inner">
+
+
+                    <div id="alpha">
+                        <div id="alpha-inner">
+                            <h1 id="page-title"><$mt:Var name="page_title"$></h1>
+                            <$mt:Var name="message"$>
+                            <p><a href="<mt:If name="comment_error">javascript:history.back()<mt:Else><$mt:EntryLink$></mt:If>">元の記事</a>に戻る</p>
+                        </div>
+                    </div>
+
+
+                    <$mt:Include module="サイドバー"$>
+
+
+                </div>
+            </div>
+
+
+            <$mt:Include module="バナーフッター"$>
+
+
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tmpl/concatinate.mtml b/tmpl/concatinate.mtml
new file mode 100644 (file)
index 0000000..6ee14af
--- /dev/null
@@ -0,0 +1,10 @@
+<mt:SetVar name="i" value="0" />
+<mt:SetVarTemplate name="do_concatinate">
+<mt:Var name="src" index="$i" setvar="tmp_concat" />
+<mt:If name="tmp_concat">
+<mt:SetVar name="dest" function="push" value="$tmp_concat" />
+<mt:SetVar name="i" value="1" op="add" />
+<mt:Var name="do_concatinate" />
+</mt:If>
+</mt:SetVarTemplate>
+<mt:Var name="do_concatinate" />
diff --git a/tmpl/duplicate.mtml b/tmpl/duplicate.mtml
new file mode 100644 (file)
index 0000000..01edf8b
--- /dev/null
@@ -0,0 +1,12 @@
+<mt:SetVar name="i" value="0" />
+<mt:SetVar name="tmp_duplicate_name" value="$name" />
+<mt:Include module="new_array" name="$tmp_duplicate_name" />
+<mt:SetVarTemplate name="do_duplicate">
+<mt:Var name="array" index="$i" setvar="tmp_dup" />
+<mt:If name="tmp_dup">
+<mt:SetVar name="$tmp_duplicate_name" function="push" value="$tmp_dup" />
+<mt:SetVar name="i" value="1" op="add" />
+<mt:Var name="do_duplicate" />
+</mt:If>
+</mt:SetVarTemplate>
+<mt:Var name="do_duplicate" />
diff --git a/tmpl/dynamic_error.mtml b/tmpl/dynamic_error.mtml
new file mode 100644 (file)
index 0000000..7cba7a9
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <$mt:Include module="HTMLヘッダー"$>
+    <title><$mt:BlogName encode_html="1"$>: ページが見つかりません。</title>
+</head>
+<body id="<$mt:BlogTemplateSetID$>" class="mt-dynamic-error <$mt:Var name="page_layout"$>">
+    <div id="container">
+        <div id="container-inner">
+
+
+            <$mt:Include module="バナーヘッダー"$>
+
+
+            <div id="content">
+                <div id="content-inner">
+
+
+                    <div id="alpha">
+                        <div id="alpha-inner">
+                            <h1 id="page-title">ページが見つかりません。</h1>
+                            <blockquote>
+                                <strong><$mt:ErrorMessage$></strong>
+                            </blockquote>
+                        </div>
+                    </div>
+
+
+                    <$mt:Include module="サイドバー"$>
+
+
+                </div>
+            </div>
+
+
+            <$mt:Include module="バナーフッター"$>
+
+
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tmpl/echo.mtml b/tmpl/echo.mtml
new file mode 100644 (file)
index 0000000..fd975cf
--- /dev/null
@@ -0,0 +1,29 @@
+<mt:SetVarTemplate name="do_test">
+<mt:SetVar name="stdin_save" value="$stdin" />
+<mt:SetVar name="stdout" value="" />
+<mt:Date format="%H:%M:%S" setvar="start_time" />
+<mt:IncludeBlock module="grass" input="stdin" output="stdout">
+<mt:Var name="program" />
+</mt:IncludeBlock>
+<mt:Date format="%H:%M:%S" setvar="end_time" />
+<dl>
+       <dt>Program:</dt>
+       <dd><pre><mt:Var name="program" trim="1" /></pre></dd>
+       <dt>Input:</dt>
+       <dd><mt:Var name="stdin_save" /></dd>
+       <dt>Output:</dt>
+       <dd><mt:Var name="stdout" /></dd>
+       <dt>Time:</dt>
+       <dd><mt:Var name="start_time" /> - <mt:Var name="end_time" />
+</dl>
+</mt:SetVarTemplate>
+
+<mt:SetVarBlock name="program">
+wwWWwWWWwvwWWwwWwwwwwWwwwwwwwWWwWWWWWWWWWWwWwwWwWwwwwwwwwwwWwwwwWWWwwwwwwwwwwWw
+wwwwwwwwww
+</mt:SetVarBlock>
+<mt:SetVar name="stdin" value="echo" />
+<mt:Var name="do_test" />
+
+<h3><a href="http://www.blue.sky.or.jp/grass/">Grass</a></h3>
+<h3><a href="http://www11.atwiki.jp/s-irie/pages/20.html#id_3dc3f1d2">grass-sample-echo</a>
diff --git a/tmpl/fn.mtml b/tmpl/fn.mtml
new file mode 100644 (file)
index 0000000..310186b
--- /dev/null
@@ -0,0 +1,32 @@
+<mt:SetVar name="tmp_fn{class}" value="fn" />
+<mt:SetVar name="tmp_fn{code}" value="$code" />
+<mt:SetVar name="tmp_fn{env}" value="$env" />
+<mt:SetVar name="$name" value="$tmp_fn" />
+<mt:SetVar name="tmp_fn" function="undef" />
+
+<mt:Unless name="fn::defined">
+<mt:SetVar name="fn::defined" value="1" />
+
+<mt:SetVarTemplate name="fn::app">
+<mt:Var name="self{machine}" setvar="tmp_fn_machine" />
+<mt:Var name="self{code}" setvar="tmp_fn_self_code" />
+<mt:Var name="self{env}" setvar="tmp_fn_self_env" />
+<mt:Var name="self{arg}" setvar="tmp_fn_self_arg" />
+
+<mt:Var name="tmp_fn_machine{code}" setvar="tmp_fn_code" />
+<mt:Var name="tmp_fn_machine{env}" setvar="tmp_fn_env" />
+<mt:Var name="tmp_fn_machine{dump}" setvar="tmp_fn_dump" />
+<mt:SetVar name="tmp_fn_tmp1" function="undef" />
+<mt:SetVar name="tmp_fn_tmp1" function="push" value="$tmp_fn_code" />
+<mt:SetVar name="tmp_fn_tmp1" function="push" value="$tmp_fn_env" />
+<mt:SetVar name="tmp_fn_dump" function="push" value="$tmp_fn_tmp1" />
+
+<mt:Include module="duplicate" name="tmp_fn_tmp2" array="$tmp_fn_self_code" />
+<mt:SetVar name="tmp_fn_machine{code}" value="$tmp_fn_tmp2" />
+<mt:Include module="duplicate" name="tmp_fn_tmp3" array="$tmp_fn_self_env" />
+<mt:SetVar name="tmp_fn_machine{env}" value="$tmp_fn_tmp3" />
+
+<mt:SetVar name="tmp_fn_tmp3" function="push" value="$tmp_fn_self_arg" />
+</mt:SetVarTemplate>
+
+</mt:Unless>
diff --git a/tmpl/grass.mtml b/tmpl/grass.mtml
new file mode 100644 (file)
index 0000000..818177c
--- /dev/null
@@ -0,0 +1,58 @@
+<mt:Include module="parse" name="code" source="$contents" />
+
+<mt:Include module="in" name="in" />
+<mt:Include module="char" name="char" char_code="119"/>
+<mt:Include module="succ" name="succ" />
+<mt:Include module="out" name="out" />
+<mt:SetVar name="env" function="undef" />
+<mt:SetVar name="env" function="push" value="$in" />
+<mt:SetVar name="env" function="push" value="$char" />
+<mt:SetVar name="env" function="push" value="$succ" />
+<mt:SetVar name="env" function="push" value="$out" />
+
+<mt:SetVar name="dump" function="undef" />
+<mt:SetVar name="tmp_dump_1" function="undef" />
+<mt:Include module="new_array" name="tmp_dump_1_1" />
+<mt:Include module="new_array" name="tmp_dump_1_2" />
+<mt:SetVar name="tmp_dump_1" function="push" value="$tmp_dump_1_1" />
+<mt:SetVar name="tmp_dump_1" function="push" value="$tmp_dump_1_2" />
+<mt:SetVar name="dump" function="push" value="$tmp_dump_1" />
+
+<mt:SetVar name="tmp_dump_1" function="undef" />
+<mt:SetVar name="tmp_dump_2" function="undef" />
+<mt:Include module="app" name="app" m="1" n="1" />
+<mt:Include module="new_array" name="tmp_dump_2_1" />
+<mt:SetVar name="tmp_dump_2" function="push" value="$app" />
+<mt:SetVar name="tmp_dump_1" function="push" value="$tmp_dump_2" />
+<mt:SetVar name="tmp_dump_1" function="push" value="$tmp_dump_2_1" />
+<mt:SetVar name="dump" function="push" value="$tmp_dump_1" />
+
+<mt:SetVar name="machine" function="undef" />
+<mt:SetVar name="machine{code}" value="$code" />
+<mt:SetVar name="machine{env}" value="$env" />
+<mt:SetVar name="machine{dump}" value="$dump" />
+
+<mt:SetVarTemplate name="eval">
+<mt:Var name="machine{code}" setvar="code" />
+<mt:Var name="machine{env}" setvar="env" />
+<mt:Var name="machine{dump}" setvar="dump" />
+
+<mt:Var name="code" function="shift" setvar="insn" />
+<mt:If name="insn">
+<mt:SetVar name="insn{machine}" value="$machine" />
+<mt:SetVar name="self" value="$insn" />
+<mt:SetVarBlock name="method"><mt:Var name="insn{class}" />::eval</mt:SetVarBlock>
+<mt:Var name="$method" />
+<mt:Var name="eval" trim="1" />
+<mt:ElseIf name="dump[0]">
+<mt:Var name="env[-1]" setvar="ret" />
+<mt:Var name="dump" function="pop" setvar="tmp_eval" />
+<mt:Var name="tmp_eval[0]" setvar="code" />
+<mt:Var name="tmp_eval[1]" setvar="env" />
+<mt:SetVar name="env" function="push" value="$ret" />
+<mt:SetVar name="machine{code}" value="$code" />
+<mt:SetVar name="machine{env}" value="$env" />
+<mt:Var name="eval" trim="1" />
+</mt:If>
+</mt:SetVarTemplate>
+<mt:Var name="eval" trim="1" />
\ No newline at end of file
diff --git a/tmpl/hello_world_initial_version.mtml b/tmpl/hello_world_initial_version.mtml
new file mode 100644 (file)
index 0000000..8d3a961
--- /dev/null
@@ -0,0 +1,53 @@
+<mt:SetVarTemplate name="do_test">
+<mt:SetVar name="stdout" value="" />
+<mt:Date format="%H:%M:%S" setvar="start_time" />
+<mt:IncludeBlock module="grass" output="stdout">
+<mt:Var name="program" />
+</mt:IncludeBlock>
+<mt:Date format="%H:%M:%S" setvar="end_time" />
+<dl>
+       <dt>Program:</dt>
+       <dd><pre><mt:Var name="program" trim="1" /></pre></dd>
+       <dt>Output:</dt>
+       <dd><mt:Var name="stdout" /></dd>
+       <dt>Time:</dt>
+       <dd><mt:Var name="start_time" /> - <mt:Var name="end_time" />
+</dl>
+</mt:SetVarTemplate>
+
+<mt:SetVarBlock name="program">
+wwWwwvwwwwWWWwwWwwWWWWWWwwwwWwwvwwwWWwWWWWwvwwWWwWWWwvwwWWwWWWwWWWWwvw
+WWWWWWwwwWwwwwWWWWWWwwwwWwwwwwwWWWWWWWWWwwwWwwwwwwwWWWWWWWWWWWwWwwwwww
+WWWWWWWWWWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWW
+WWWWWwWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWwwwwwwwWwwwwwwwwwwwwwwwwwwWWWWWWW
+WWWWWWWWWWWWWWwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwww
+wwwwwWwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWwWwwwwwwwwWwwwwwwwwwwwwww
+wwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWwwwwwwwwwwww
+wwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWWWWWW
+WWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWwwwwwwwwwwww
+wwwwwwwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwww
+wwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwww
+wwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwWWWWWWWW
+WWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWww
+WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
+wwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwww
+wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWWWWWWWWW
+WWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
+WWWWWWWWWWWWWwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
+WWwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwW
+WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwWWWWWWWWWWW
+WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwWWWWWWWW
+WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwww
+WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwww
+wwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwww
+wWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwW
+WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwww
+wwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWwwwwwww
+wwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
+WWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
+WWWWWWWWWWWWWWWWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
+</mt:SetVarBlock>
+<mt:Var name="do_test" />
+
+<h3><a href="http://www.blue.sky.or.jp/grass/">Grass</a></h3>
+<h3><a href="http://d.hatena.ne.jp/uenoB/20080609/1213010983">Helloworld</a>
diff --git a/tmpl/hello_world_short_version.mtml b/tmpl/hello_world_short_version.mtml
new file mode 100644 (file)
index 0000000..8767def
--- /dev/null
@@ -0,0 +1,29 @@
+<mt:SetVarTemplate name="do_test">
+<mt:SetVar name="stdout" value="" />
+<mt:Date format="%H:%M:%S" setvar="start_time" />
+<mt:IncludeBlock module="grass" output="stdout">
+<mt:Var name="program" />
+</mt:IncludeBlock>
+<mt:Date format="%H:%M:%S" setvar="end_time" />
+<dl>
+       <dt>Program:</dt>
+       <dd><pre><mt:Var name="program" trim="1" /></pre></dd>
+       <dt>Output:</dt>
+       <dd><mt:Var name="stdout" /></dd>
+       <dt>Time:</dt>
+       <dd><mt:Var name="start_time" /> - <mt:Var name="end_time" />
+</dl>
+</mt:SetVarTemplate>
+
+<mt:SetVarBlock name="program">
+wWwwwWwwwwwWWWWwvwvwwWWWWwWWWWwwwvwwWWwwWwwvwwWWWwWWWwvwWWwWwvwWWwwwwwWwwvwwWWw
+WWWwvWwvwwwWWWwwWwwWWWWwvWwwwWWWWwWWWWwwwWwwWWWWWwWWWWWWwvwwWWwWWWwvWwwWWwwwwWW
+WwwwwwwWWWWWWWWWWwwwwwwwwWwwWWwwwwWWWwwwwwwvwwwWWWwwWwwWWWWwvWwwwwwwWWwwwwWWWww
+wwWWWWwWWWWWWWWWWWWWWWWWWWwwwwwWwwWWwWWWwWWWWwvwWWWWWWWWWWWWWWWWWWWWWWWWWWWWWww
+wwwwwwwWwwwwwwwwwWwwwwwwWwwwwwwwWwwwwwwwWwwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwww
+wwwwvwwvWWwWwwWwwwwwwWwwwwwwWwwwwwwwwwWwwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwvw
+</mt:SetVarBlock>
+<mt:Var name="do_test" />
+
+<h3><a href="http://www.blue.sky.or.jp/grass/">Grass</a></h3>
+<h3><a href="http://www11.atwiki.jp/s-irie/pages/20.html#id_99f7dd8e">grass-sample-hello</a>
\ No newline at end of file
diff --git a/tmpl/in.mtml b/tmpl/in.mtml
new file mode 100644 (file)
index 0000000..480eb72
--- /dev/null
@@ -0,0 +1,27 @@
+<mt:SetVar name="tmp_in{class}" value="in" />
+<mt:SetVar name="$name" value="$tmp_in" />
+<mt:SetVar name="tmp_in" function="undef" />
+
+<mt:Unless name="in::defined">
+<mt:SetVar name="in::defined" value="1" />
+
+<mt:SetVarTemplate name="in::app">
+
+<mt:Var name="self{machine}" setvar="tmp_in_machine" />
+<mt:Var name="self{arg}" setvar="tmp_in_arg" />
+<mt:Var name="tmp_in_machine{code}" setvar="tmp_in_code" />
+<mt:Var name="tmp_in_machine{env}" setvar="tmp_in_env" />
+<mt:Var name="tmp_in_machine{dump}" setvar="tmp_in_dump" />
+
+<mt:Var name="$input" count_characters="1" setvar="tmp_in_count" />
+<mt:If name="tmp_in_count">
+<mt:Var name="$input" regex_replace="/(.|\r\n|\n|\r)(.*)/","$1" setvar="tmp_in_char" />
+<mt:Var name="$input" regex_replace="/(.|\r\n|\n|\r)(.*)/","$2" setvar="$input" />
+<mt:Include module="char_code" name="tmp_in_char_code" char="$tmp_in_char" />
+<mt:Include module="char" name="tmp_in_arg" char_code="$tmp_in_char_code" />
+</mt:If>
+<mt:SetVar name="tmp_in_env" function="push" value="$tmp_in_arg" />
+
+</mt:SetVarTemplate>
+
+</mt:Unless>
diff --git a/tmpl/inversion.mtml b/tmpl/inversion.mtml
new file mode 100644 (file)
index 0000000..c3a8502
--- /dev/null
@@ -0,0 +1,5 @@
+<mt:If name="$name" lt="0">
+<mt:Var name="$name" replace="-","" setvar="$name" />
+<mt:ElseIf name="$name" gt="0">
+<mt:SetVar name="$name" value="-" prepend="1" />
+</mt:If>
diff --git a/tmpl/new_array.mtml b/tmpl/new_array.mtml
new file mode 100644 (file)
index 0000000..9fd63f0
--- /dev/null
@@ -0,0 +1,3 @@
+<mt:SetVar name="$name" function="undef" />
+<mt:SetVar name="$name" function="push" value="" />
+<mt:Var name="$name" function="pop" />
\ No newline at end of file
diff --git a/tmpl/out.mtml b/tmpl/out.mtml
new file mode 100644 (file)
index 0000000..353ce3f
--- /dev/null
@@ -0,0 +1,23 @@
+<mt:SetVar name="tmp_out{class}" value="out" />
+<mt:SetVar name="$name" value="$tmp_out" />
+<mt:SetVar name="tmp_out" function="undef" />
+
+<mt:Unless name="out::defined">
+<mt:SetVar name="out::defined" value="1" />
+
+<mt:SetVarTemplate name="out::app">
+
+<mt:Var name="self{machine}" setvar="tmp_out_machine" />
+<mt:Var name="self{arg}" setvar="tmp_out_char" />
+<mt:Var name="tmp_out_char{char_code}" setvar="tmp_out_char_char_code" />
+
+<mt:Include module="print" char_code="$tmp_out_char_char_code" />
+
+<mt:Var name="tmp_out_machine{code}" setvar="tmp_out_code" />
+<mt:Var name="tmp_out_machine{env}" setvar="tmp_out_env" />
+<mt:Var name="tmp_out_machine{dump}" setvar="tmp_out_dump" />
+
+<mt:SetVar name="tmp_out_env" function="push" value="$tmp_out_char" />
+</mt:SetVarTemplate>
+
+</mt:Unless>
diff --git a/tmpl/parse.mtml b/tmpl/parse.mtml
new file mode 100644 (file)
index 0000000..6e69348
--- /dev/null
@@ -0,0 +1,86 @@
+<mt:SetVar name="tmp_parse_name" value="$name" />
+
+<mt:SetVarTemplate name="foreach_body">
+       <mt:If name="c">
+               <mt:Var
+                       name="c"
+                       regex_replace="/\A(W*)(w*)(.*)/","$1"
+                       count_characters="1"
+                       setvar="m"
+               />
+               <mt:Var
+                       name="c"
+                       regex_replace="/\A(W*)(w*)(.*)/","$2"
+                       count_characters="1"
+                       setvar="n"
+               />
+               
+               <mt:Include module="app" name="app" m="$m" n="$n" />
+               <mt:SetVar name="body" function="push" value="$app" />
+
+               <mt:Var
+                       name="c"
+                       regex_replace="/\A(W*)(w*)(.*)/","$3"
+                       setvar="c"
+               />
+               <mt:Var name="foreach_body" />
+       </mt:If>
+</mt:SetVarTemplate>
+
+<mt:SetVarTemplate name="foreach_codeblock">
+       <mt:If name="source">
+               <mt:Include module="new_array" name="body" />
+               <mt:Unless name="tmp_code">
+                       <mt:Include module="new_array" name="tmp_code" />
+               </mt:Unless>
+
+               <mt:Var
+                       name="source"
+                       regex_replace="/(.*?)(v|$)(.*)/","$1"
+                       setvar="c"
+               />
+               <mt:Var
+                       name="c"
+                       regex_replace="/\A(w*)(.*)/","$1"
+                       count_characters="1"
+                       setvar="arity"
+               />
+               <mt:Var
+                       name="c"
+                       regex_replace="/\A(w*)(.*)/","$2"
+                       setvar="c"
+               />
+               <mt:Var name="foreach_body" />
+
+               <mt:SetVar name="arity" value="1" op="sub" />
+               <mt:For var="i" from="0" to="$arity">
+                       <mt:Include module="abs" name="tmp1" body="$body" />
+                       <mt:SetVar name="tmp2" function="push" value="$tmp1" />
+                       <mt:SetVar name="body" value="$tmp2" />
+                       <mt:SetVar name="tmp1" function="undef" />
+                       <mt:SetVar name="tmp2" function="undef" />
+               </mt:For>
+               <mt:Include module="concatinate" dest="$tmp_code" src="$body" />
+
+               <mt:Var
+                       name="source"
+                       regex_replace="/(.*?)(v|$)(.*)/","$3"
+                       setvar="source"
+               />
+               <mt:Var name="foreach_codeblock" />
+       <mt:Else>
+               <mt:SetVar name="$tmp_parse_name" value="$tmp_code" />
+               <mt:SetVar name="tmp_code" function="undef" />
+       </mt:If>
+</mt:SetVarTemplate>
+
+<mt:Var
+       name="source"
+       regex_replace="/w/g","w"
+       regex_replace="/W/g","W"
+       regex_replace="/v/g","v"
+       regex_replace="/\A[^w]*/",""
+       regex_replace="/[^wWv]/g",""
+       setvar="source"
+/>
+<mt:Var name="foreach_codeblock" />
diff --git a/tmpl/popup_image.mtml b/tmpl/popup_image.mtml
new file mode 100644 (file)
index 0000000..94ddeab
--- /dev/null
@@ -0,0 +1,7 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head><title><$mt:ImageURL$></title></head>
+<body id="uploaded-image-popup" class="popup" style="margin: 0;padding: 0;">
+    <img src="<$mt:ImageURL$>" width="<$mt:ImageWidth$>" height="<$mt:ImageHeight$>" alt="<$mt:ImageURL$>" style="margin: 0;padding: 0;border: 0;" />
+</body>
+</html>
diff --git a/tmpl/print.mtml b/tmpl/print.mtml
new file mode 100644 (file)
index 0000000..cfd5f4b
--- /dev/null
@@ -0,0 +1,102 @@
+<mt:Unless name="print_chars">
+<mt:SetVarBlock name="print_chars[9]"> </mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[10]">
+</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[32]"> </mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[33]">!</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[34]">"</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[35]">#</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[36]">$</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[37]">%</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[38]">&</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[39]">'</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[40]">(</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[41]">)</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[42]">*</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[43]">+</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[44]">,</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[45]">-</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[46]">.</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[47]">/</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[48]">0</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[49]">1</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[50]">2</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[51]">3</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[52]">4</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[53]">5</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[54]">6</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[55]">7</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[56]">8</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[57]">9</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[58]">:</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[59]">;</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[60]"><</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[61]">=</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[62]">></mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[63]">?</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[64]">@</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[65]">A</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[66]">B</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[67]">C</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[68]">D</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[69]">E</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[70]">F</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[71]">G</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[72]">H</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[73]">I</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[74]">J</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[75]">K</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[76]">L</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[77]">M</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[78]">N</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[79]">O</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[80]">P</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[81]">Q</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[82]">R</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[83]">S</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[84]">T</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[85]">U</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[86]">V</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[87]">W</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[88]">X</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[89]">Y</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[90]">Z</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[91]">[</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[92]">\</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[93]">]</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[94]">^</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[95]">_</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[96]">`</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[97]">a</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[98]">b</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[99]">c</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[100]">d</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[101]">e</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[102]">f</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[103]">g</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[104]">h</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[105]">i</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[106]">j</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[107]">k</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[108]">l</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[109]">m</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[110]">n</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[111]">o</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[112]">p</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[113]">q</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[114]">r</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[115]">s</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[116]">t</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[117]">u</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[118]">v</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[119]">w</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[120]">x</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[121]">y</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[122]">z</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[123]">{</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[124]">|</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[125]">}</mt:SetVarBlock>
+<mt:SetVarBlock name="print_chars[126]">~</mt:SetVarBlock>
+</mt:Unless>
+<mt:Var name="print_chars" index="$char_code" setvar="tmp_print_char" />
+<mt:SetVar name="$output" value="$tmp_print_char" append="1" />
\ No newline at end of file
diff --git a/tmpl/search_results.mtml b/tmpl/search_results.mtml
new file mode 100644 (file)
index 0000000..9c46d7a
--- /dev/null
@@ -0,0 +1,180 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" id="sixapart-standard">
+<head>
+    <script type="text/javascript">
+    /* <![CDATA[ */
+    var user = <$mt:UserSessionState$>;
+    /* ]]> */
+    </script>
+    <$mt:Include module="HTMLヘッダー"$>
+    <title><$mt:BlogName encode_html="1"$>: 検索結果</title>
+    <mt:Ignore>Below Javascript adds ajax search capability</mt:Ignore>
+    <script type="text/javascript">
+    /* <![CDATA[ */
+    <mt:IfMoreResults>
+    function getResults(page) {
+        page = parseInt(page);
+        if (timer) window.clearTimeout(timer);
+        var xh = mtGetXmlHttp();
+        if (!xh) return false;
+        var res = results[page];
+        if (!res) return;
+        var url = res['next_url'];
+        if (!url) return;
+
+        xh.open('GET', url + '&format=js', true);
+        xh.onreadystatechange = function() {
+            if ( xh.readyState == 4 ) {
+                if ( xh.status && ( xh.status != 200 ) ) {
+                    // error - ignore
+                } else {
+                    try {
+                        var page_results = eval("(" + xh.responseText + ")");
+                        if ( page_results['error'] == null )
+                            results[page + 1] = page_results['result'];
+                    } catch (e) {
+                    }
+                }
+            }
+        };
+        xh.send(null);
+    }
+
+    function swapContent(direction) {
+        if ( direction == undefined ) direction = 1;
+        var page_span = document.getElementById('current-page');
+        if (!page_span) return true;
+        var next_page = direction + parseInt(page_span.innerHTML);
+        var res = results[next_page];
+        if (!res) return true;
+        var content = res['content'];
+        if (!content) return true;
+        var div = document.getElementById('search-results');
+        if (!div) return true;
+        div.innerHTML = content;
+        timer = window.setTimeout("getResults(" + next_page + ")", 1*1000);
+        window.scroll(0, 0);
+        return false;
+    }
+    <mt:Else><mt:IfPreviousResults>
+    function swapContent(direction) {
+        return true;
+    }</mt:IfPreviousResults>
+    </mt:IfMoreResults>
+    /* ]]> */
+    </script>
+</head>
+<body id="<$mt:BlogTemplateSetID$>" class="mt-search-results <$mt:Var name="page_layout"$>">
+    <div id="container">
+        <div id="container-inner">
+
+
+            <$mt:Include module="バナーヘッダー"$>
+
+
+            <div id="content">
+                <div id="content-inner">
+
+
+                    <div id="alpha">
+                        <div id="alpha-inner">
+
+<mt:Ignore><!--
+    Below is the block to show search results.
+    This makes an independent block to support
+    Ajax-based background retrieval of the next search results.
+--></mt:Ignore>
+<mt:SetVarTemplate id="search_results" name="search_results">  
+<mt:SearchResults>
+    <mt:SearchResultsHeader>
+                            <div id="search-results">
+                                <span id="current-page" class="hidden"><$mt:CurrentPage$></span>
+                                <h1 id="page-title" class="search-results-header">
+        <mt:IfStraightSearch>
+                                    「<$mt:SearchString$>」と一致するもの
+        </mt:IfStraightSearch>
+        <mt:IfTagSearch>
+                                    タグ「<$mt:SearchString$>」が付けられているもの
+        </mt:IfTagSearch>
+                                </h1>
+                                <div class="search-results-container autopagerize_page_element">
+    </mt:SearchResultsHeader>
+                                    <$mt:Include module="ブログ記事の概要" hide_counts="1"$>
+    <mt:SearchResultsFooter>
+                                </div><div class="autopagerize_insert_before"></div>
+
+    <mt:Ignore><!-- Used with the ajax search capability of the new search class --></mt:Ignore>
+                                <div class="content-nav">
+                                    <mt:IfPreviousResults><a href="<$mt:PreviousLink$>" rel="prev" onclick="return swapContent(-1);">&lt; 前</a>&nbsp;&nbsp;</mt:IfPreviousResults><mt:PagerBlock><mt:IfCurrentPage><$mt:Var name="__value__"$><mt:Else><a href="<$mt:PagerLink$>"><$mt:Var name="__value__"$></a></mt:IfCurrentPage><mt:Unless name="__last__">&nbsp;</mt:Unless></mt:PagerBlock><mt:IfMoreResults>&nbsp;&nbsp;<a href="<$mt:NextLink$>" rel="next" onclick="return swapContent();">次 &gt;</a></mt:IfMoreResults>
+                                </div>
+                            </div>
+    </mt:SearchResultsFooter>
+</mt:SearchResults>
+</mt:SetVarTemplate>
+<mt:Ignore><!-- Display search results constructed in the block above --></mt:Ignore>
+<$mt:Var name="search_results"$>
+
+
+<mt:Ignore><!-- Display no results message --></mt:Ignore>
+<mt:NoSearchResults>
+                            <h1 id="page-title" class="search-results-header">
+    <mt:IfStraightSearch>
+                                「<$mt:SearchString$>」と一致するもの
+    </mt:IfStraightSearch>
+    <mt:IfTagSearch>
+                                タグ「<$mt:SearchString$>」が付けられているもの
+    </mt:IfTagSearch>
+                            </h1>
+                            <p>「<$mt:SearchString$>」と一致する結果は見つかりませんでした。</p>
+</mt:NoSearchResults>
+
+
+<mt:Ignore><!-- Display instructions for searching if search script was accessed without a query --></mt:Ignore>
+<mt:NoSearch>
+                            <h1 id="page-title" class="search-results-header">例</h1>
+                            <p>すべての単語が順序に関係なく検索されます。フレーズで検索したいときは引用符で囲んでください。</p>
+                            <blockquote>
+                                <p><code>"movable type"</code></p>
+                            </blockquote>
+                            <p>AND、OR、NOTを入れることで論理検索を行うこともできます。</p>
+                            <blockquote>
+                                <p><code>個人 OR 出版</code></p>
+                                <p><code>個人 NOT 出版</code></p>
+                            </blockquote>
+</mt:NoSearch>
+
+<mt:Ignore><!-- Used with the ajax search capability of the new search class --></mt:Ignore>
+<mt:IfMoreResults>
+<script type="text/javascript">
+<!--
+var div = document.getElementById('search-results');
+var results = {
+    '<$mt:CurrentPage$>': {
+        'content': div.innerHTML,
+        'next_url': '<$mt:NextLink$>'
+    }
+};
+var timer = window.setTimeout("getResults(" + <$mt:CurrentPage$> + ")", 1*1000);
+//-->
+</script>
+</mt:IfMoreResults>
+
+
+                        </div>
+                    </div>
+
+                    <$mt:Include module="サイドバー"$>
+
+
+                </div>
+            </div>
+
+
+            <$mt:Include module="バナーフッター"$>
+
+
+        </div>
+    </div>
+</body>
+</html>
diff --git a/tmpl/succ.mtml b/tmpl/succ.mtml
new file mode 100644 (file)
index 0000000..90cc9ed
--- /dev/null
@@ -0,0 +1,26 @@
+<mt:SetVar name="tmp_succ{class}" value="succ" />
+<mt:SetVar name="$name" value="$tmp_succ" />
+<mt:SetVar name="tmp_succ" function="undef" />
+
+<mt:Unless name="succ::defined">
+<mt:SetVar name="succ::defined" value="1" />
+
+<mt:SetVarTemplate name="succ::app">
+<mt:Var name="self{machine}" setvar="tmp_succ_machine" />
+<mt:Var name="self{arg}" setvar="tmp_succ_char" />
+<mt:Var name="tmp_succ_char{char_code}" setvar="tmp_succ_char_char_code" />
+
+<mt:Var name="tmp_succ_machine{code}" setvar="tmp_succ_code" />
+<mt:Var name="tmp_succ_machine{env}" setvar="tmp_succ_env" />
+<mt:Var name="tmp_succ_machine{dump}" setvar="tmp_succ_dump" />
+
+<mt:SetVar name="tmp_succ_char_char_code" value="1" op="add" />
+<mt:If name="tmp_succ_char_char_code" gt="255">
+<mt:SetVar name="tmp_succ_char_char_code" value="0" />
+</mt:If>
+<mt:Include module="char" name="tmp_succ_new_char" char_code="$tmp_succ_char_char_code" />
+
+<mt:SetVar name="tmp_succ_env" function="push" value="$tmp_succ_new_char" />
+</mt:SetVarTemplate>
+
+</mt:Unless>