2014-03-16 23:39:07 +00:00
|
|
|
package Slic3r::GCode::PlaceholderParser;
|
2014-06-12 07:23:10 +00:00
|
|
|
use strict;
|
|
|
|
use warnings;
|
2014-03-16 23:39:07 +00:00
|
|
|
|
2014-05-06 08:07:18 +00:00
|
|
|
sub new {
|
|
|
|
# TODO: move this code to C++ constructor, remove this method
|
|
|
|
my ($class) = @_;
|
2014-11-09 19:41:27 +00:00
|
|
|
|
2014-05-06 08:07:18 +00:00
|
|
|
my $self = $class->_new;
|
|
|
|
$self->apply_env_variables;
|
|
|
|
return $self;
|
|
|
|
}
|
2014-03-16 23:39:07 +00:00
|
|
|
|
2014-05-06 08:07:18 +00:00
|
|
|
sub apply_env_variables {
|
2014-03-16 23:39:07 +00:00
|
|
|
my ($self) = @_;
|
2014-05-06 08:07:18 +00:00
|
|
|
$self->_single_set($_, $ENV{$_}) for grep /^SLIC3R_/, keys %ENV;
|
2014-04-25 17:47:13 +00:00
|
|
|
}
|
|
|
|
|
2014-03-16 23:39:07 +00:00
|
|
|
sub process {
|
|
|
|
my ($self, $string, $extra) = @_;
|
|
|
|
|
|
|
|
# extra variables have priority over the stored ones
|
|
|
|
if ($extra) {
|
|
|
|
my $regex = join '|', keys %$extra;
|
|
|
|
$string =~ s/\[($regex)\]/$extra->{$1}/eg;
|
|
|
|
}
|
|
|
|
{
|
2014-05-06 08:07:18 +00:00
|
|
|
my $regex = join '|', @{$self->_single_keys};
|
|
|
|
$string =~ s/\[($regex)\]/$self->_single_get("$1")/eg;
|
2014-03-16 23:39:07 +00:00
|
|
|
}
|
|
|
|
{
|
2014-05-06 08:07:18 +00:00
|
|
|
my $regex = join '|', @{$self->_multiple_keys};
|
|
|
|
$string =~ s/\[($regex)\]/$self->_multiple_get("$1")/egx;
|
2014-04-29 15:06:31 +00:00
|
|
|
|
2014-04-29 15:12:00 +00:00
|
|
|
# unhandled indices are populated using the first value
|
2014-05-06 08:07:18 +00:00
|
|
|
$string =~ s/\[($regex)_\d+\]/$self->_multiple_get("$1")/egx;
|
2014-03-16 23:39:07 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return $string;
|
|
|
|
}
|
|
|
|
|
|
|
|
1;
|