Changeset 23454

Show
Ignore:
Timestamp:
11/13/08 01:27:22 (5 years ago)
Author:
tokuhirom
Message:

シンプルなように実装。

Location:
lang/perl/MENTA/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/perl/MENTA/trunk/bin/cgi-server.pl

    r23448 r23454  
    1616            waitpid($pid, POSIX::WNOHANG); 
    1717        } elsif ($pid == 0) { 
    18             system "$^X bin/menta.pl"; 
    19             chdir 'out'; 
     18            chdir 'app'; 
    2019            my $out = MENTA::BindSTDOUT->bind(sub { 
     20                package main; 
    2121                do './menta.cgi'; 
    2222                die $@ if $@; 
  • lang/perl/MENTA/trunk/lib/MENTA/Builder.pm

    r23450 r23454  
    88my $OUTPUT_DIR = 'out'; 
    99my $SOURCE_DIR = 'app'; 
    10  
    11 my $TMPL = <<'...'; 
    12 ### SHEBANG ### 
    13 use strict; 
    14 use warnings; 
    15 use utf8; 
    16  
    17 ### INCLUDE 'lib/MENTA.pm' ### 
    18 ### INCLUDE 'app/menta.cgi' ### 
    19 ... 
    20  
    21 sub replace { 
    22     my ($src, $params) = @_; 
    23     $src =~ s{###\s+INCLUDE\s+'([^']+)'\s+###}{ 
    24         read_source($1); 
    25     }gem; 
    26     while (my ($key, $val) = each %$params) { 
    27         $src =~ s/### $key ###/$val/g; 
    28     } 
    29     $src; 
    30 } 
    31  
    32 sub read_source { 
    33     my $fname = shift; 
    34     my $src = _read_and_indent($fname, 1); 
    35     $src =~ s{require\s+['"]([^'"]+)['"]\s*;}{ 
    36         my $fname = $1; 
    37         $fname =~ s!^\.\./*!!; 
    38         _read_and_indent($fname, 2); 
    39     }ge; 
    40     $src; 
    41 } 
    42  
    43 sub _read_and_indent { 
    44     my ($fname, $indent_level) = @_; 
    45     my $one_level = 4; 
    46     my $indent = ' ' x ($indent_level*$one_level); 
    47     "{\n" . join("\n", grep { /^\s*$/ or $_ = $indent . $_; 1 } 
    48                        split("\n", read_file($fname))) 
    49           . "\n" . (' ' x (($indent_level-1)*$one_level)) . "}\n"; 
    50 } 
    5110 
    5211sub run { 
     
    6322sub generate_cgi { 
    6423    say "menta.cgi をつくりあげる"; 
    65     my $menta = $TMPL; 
    66     $menta = replace($menta, { 
    67         SHEBANG => do { 
    68             my ($shebang,) = split /\r\n|[\r\n]/, read_file('app/menta.cgi'); 
    69             $shebang; 
    70         }, 
    71     }); 
     24    my ($shebang,) = split /\r\n|[\r\n]/, read_file('app/menta.cgi'); 
     25    my $menta = "$shebang\n$TMPL"; 
     26    $menta .= read_file('lib/MENTA.pm'); 
     27    $menta .= read_file('app/menta.cgi'); 
    7228    $menta =~ s/use MENTA;/package main;/g; 
    73     $menta =~ s/use lib 'lib';//; 
     29    $menta =~ s!use lib '\..\/lib';!!; 
    7430    say "menta.cgi を出力しています"; 
    7531    write_file("$OUTPUT_DIR/menta.cgi" => $menta); 
  • lang/perl/MENTA/trunk/plugins/dbi_select.pl

    r23419 r23454  
    1818} 
    1919 
     201;