Acme-Syntax-Python
view release on metacpan or search on metacpan
lib/Acme/Syntax/Python.pm view on Meta::CPAN
use strict;
use warnings;
package Acme::Syntax::Python;
use Filter::Util::Call;
use vars qw($VERSION);
$VERSION = "0.01";
# ABSTRACT: Python like Syntax Module
sub import {
my $class = shift; #We don't need Class Name.
my %params = @_;
my (%context) = (
_filename => (caller)[1],
_line_no => 0,
_last_begin => 0,
_in_block => 0,
_block_depth => 0,
_lambda_block => {},
_class_block => {},
_debug => $params{debug}
);
filter_add(bless \%context, $class);
}
sub error {
my ($self) = shift;
my ($message) = shift;
my ($line_no) = shift || $self->{last_begin};
die "Error: $message at $self->{_filename} line $line_no.\n"
}
sub warning {
my ($self) = shift;
my ($message) = shift;
my ($line_no) = shift || $self->{last_begin};
warn "Warning: $message at $self->{_filename} line $line_no.\n"
}
sub filter {
my ($self) = @_;
my ($status);
$status = filter_read();
++ $self->{line_no};
if ($status <= 0) {
if($self->{_in_block}) {
$_ = "}\n";
++ $status;
$self->{_in_block} = 0;
}
return $status;
}
if($self->{_in_block}) {
_handle_block($self, $_);
}
s{^\s*import (.+);$}
{use $1;}gmx;
s{^\s*from (.+) import (.+);$}
{use $1 ($2);}gmx;
s{True}{1}gmx;
s{False}{0}gmx;
if(/class (.+) inherits (.+):/) {
s{class (.+) inherits (.+):}{\{\npackage $1;\nuse $2; our \@ISA = qw($2);\n}gmx;
_start_block($self);
}
if(/class (.+):/) {
s{class (.+):}{\{\npackage $1;\n}gmx;
_start_block($self);
}
( run in 0.522 second using v1.01-cache-2.11-cpan-39bf76dae61 )