App-Dex

 view release on metacpan or  search on metacpan

scripts/dex  view on Meta::CPAN

      my ($self, @args) = @_;
      unshift @{ $self->{data} }, @args;
  }
  sub SPLICE {
      my ($self, $offset, $length, @args) = @_;
      splice @{ $self->{data} }, $offset, $length, @args;
  }
  sub EXTEND {}
  
  
  package YAML::PP::Preserve::Scalar;
  
  use overload
      fallback => 1,
      '+' => \&value,
      '""' => \&value,
      'bool' => \&value,
      ;
  sub new {
      my ($class, %args) = @_;
      my $self = {
          %args,
      };
      bless $self, $class;
  }
  sub value { $_[0]->{value} }
  sub tag { $_[0]->{tag} }
  sub style { $_[0]->{style} || 0 }
  sub alias { $_[0]->{alias} }
  
  1;
  
  __END__
  
  =pod
  
  =encoding utf-8
  
  =head1 NAME
  
  YAML::PP - YAML 1.2 processor
  
  =head1 SYNOPSIS
  
  WARNING: Most of the inner API is not stable yet.
  
  Here are a few examples of the basic load and dump methods:
  
      use YAML::PP;
      my $ypp = YAML::PP->new;
  
      my $yaml = <<'EOM';
      --- # Document one is a mapping
      name: Tina
      age: 29
      favourite language: Perl
  
      --- # Document two is a sequence
      - plain string
      - 'in single quotes'
      - "in double quotes we have escapes! like \t and \n"
      - | # a literal block scalar
        line1
        line2
      - > # a folded block scalar
        this is all one
        single line because the
        linebreaks will be folded
      EOM
  
      my @documents = $ypp->load_string($yaml);
      my @documents = $ypp->load_file($filename);
  
      my $yaml = $ypp->dump_string($data1, $data2);
      $ypp->dump_file($filename, $data1, $data2);
  
      # The loader offers JSON::PP::Boolean, boolean.pm or
      # perl 1/'' (currently default) for booleans
      my $ypp = YAML::PP->new(boolean => 'JSON::PP');
      my $ypp = YAML::PP->new(boolean => 'boolean');
      my $ypp = YAML::PP->new(boolean => 'perl');
  
      # Enable perl data types and objects
      my $ypp = YAML::PP->new(schema => [qw/ + Perl /]);
      my $yaml = $yp->dump_string($data_with_perl_objects);
  
      # Legacy interface
      use YAML::PP qw/ Load Dump LoadFile DumpFile /;
      my @documents = Load($yaml);
      my @documents = LoadFile($filename);
      my @documents = LoadFile($filehandle);
      my $yaml = = Dump(@documents);
      DumpFile($filename, @documents);
      DumpFile($filenhandle @documents);
  
  
  Some utility scripts, mostly useful for debugging:
  
      # Load YAML into a data structure and dump with Data::Dumper
      yamlpp-load < file.yaml
  
      # Load and Dump
      yamlpp-load-dump < file.yaml
  
      # Print the events from the parser in yaml-test-suite format
      yamlpp-events < file.yaml
  
      # Parse and emit events directly without loading
      yamlpp-parse-emit < file.yaml
  
      # Create ANSI colored YAML. Can also be useful for invalid YAML, showing
      # you the exact location of the error
      yamlpp-highlight < file.yaml
  
  
  =head1 DESCRIPTION
  
  YAML::PP is a modular YAML processor.
  
  It aims to support C<YAML 1.2> and C<YAML 1.1>. See L<https://yaml.org/>.
  Some (rare) syntax elements are not yet supported and documented below.

scripts/dex  view on Meta::CPAN

      "\x08" => '\b',
      "\x0b" => '\v',
      "\x0c" => '\f',
      "\x0e" => '\x0e',
      "\x0f" => '\x0f',
      "\x10" => '\x10',
      "\x11" => '\x11',
      "\x12" => '\x12',
      "\x13" => '\x13',
      "\x14" => '\x14',
      "\x15" => '\x15',
      "\x16" => '\x16',
      "\x17" => '\x17',
      "\x18" => '\x18',
      "\x19" => '\x19',
      "\x1a" => '\x1a',
      "\x1b" => '\e',
      "\x1c" => '\x1c',
      "\x1d" => '\x1d',
      "\x1e" => '\x1e',
      "\x1f" => '\x1f',
      "\x7f" => '\x7f',
      "\x80" => '\x80',
      "\x81" => '\x81',
      "\x82" => '\x82',
      "\x83" => '\x83',
      "\x84" => '\x84',
      "\x86" => '\x86',
      "\x87" => '\x87',
      "\x88" => '\x88',
      "\x89" => '\x89',
      "\x8a" => '\x8a',
      "\x8b" => '\x8b',
      "\x8c" => '\x8c',
      "\x8d" => '\x8d',
      "\x8e" => '\x8e',
      "\x8f" => '\x8f',
      "\x90" => '\x90',
      "\x91" => '\x91',
      "\x92" => '\x92',
      "\x93" => '\x93',
      "\x94" => '\x94',
      "\x95" => '\x95',
      "\x96" => '\x96',
      "\x97" => '\x97',
      "\x98" => '\x98',
      "\x99" => '\x99',
      "\x9a" => '\x9a',
      "\x9b" => '\x9b',
      "\x9c" => '\x9c',
      "\x9d" => '\x9d',
      "\x9e" => '\x9e',
      "\x9f" => '\x9f',
      "\x{2029}" => '\P',
      "\x{2028}" => '\L',
      "\x85" => '\N',
      "\xa0" => '\_',
  );
  
  my $control_re = '\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x84\x86-\x9f\x{d800}-\x{dfff}\x{fffe}\x{ffff}\x{2028}\x{2029}\x85\xa0';
  my %to_escape = (
      "\n" => '\n',
      "\t" => '\t',
      "\r" => '\r',
      '\\' => '\\\\',
      '"' => '\\"',
      %control,
  );
  my $escape_re = $control_re . '\n\t\r';
  my $escape_re_without_lb = $control_re . '\t\r';
  
  
  sub scalar_event {
      DEBUG and warn __PACKAGE__.':'.__LINE__.": +++ scalar_event\n";
      my ($self, $info) = @_;
      my $stack = $self->event_stack;
      my $last = $stack->[-1];
      my $indent = $last->{indent};
      my $value = $info->{value};
      my $flow = $last->{flow};
  
      my $props = '';
      my $anchor = $info->{anchor};
      my $tag = $info->{tag};
      if (defined $anchor) {
          $anchor = "&$anchor";
      }
      if (defined $tag) {
          $tag = $self->emit_tag('scalar', $tag);
      }
      $props = join ' ', grep defined, ($anchor, $tag);
  
      my $style = $info->{style};
      DEBUG and local $Data::Dumper::Useqq = 1;
      $value = '' unless defined $value;
      my $first = substr($value, 0, 1);
  
      if ($value eq '') {
          if ($flow and $last->{type} ne 'MAPVALUE' and $last->{type} ne 'MAP') {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif (not $style) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
      }
      # no control characters anywhere
      elsif ($value =~ m/[$control_re]/) {
          $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
      }
      $style ||= YAML_PLAIN_SCALAR_STYLE;
  
      if ($style == YAML_SINGLE_QUOTED_SCALAR_STYLE) {
          if ($value =~ m/ \n/ or $value =~ m/\n / or $value =~ m/^\n/ or $value =~ m/\n$/) {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value eq "\n") {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
      }
      elsif ($style == YAML_LITERAL_SCALAR_STYLE or $style == YAML_FOLDED_SCALAR_STYLE) {
          if ($value eq '') {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($flow) {
              # no block scalars in flow
              if ($value =~ tr/\n//) {
                  $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
              }
              else {
                  $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
              }
          }
      }
      elsif ($style == YAML_PLAIN_SCALAR_STYLE) {
          if (not length $value) {
          }
          elsif ($value =~ m/[$escape_re_without_lb]/) {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value eq "\n") {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value !~ tr/ //c) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value !~ tr/ \n//c) {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value =~ tr/\n//) {
              $style = $flow ? YAML_DOUBLE_QUOTED_SCALAR_STYLE : YAML_LITERAL_SCALAR_STYLE;
          }
          elsif ($forbidden_first{ $first }) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($flow and $value =~ tr/,[]{}//) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif (substr($value, 0, 3) =~ m/^(?:---|\.\.\.)/) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value =~ m/: /) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value =~ m/ #/) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value =~ m/[: \t]\z/) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($value =~ m/[^\x20-\x3A\x3B-\x7E\x85\xA0-\x{D7FF}\x{E000}-\x{FEFE}\x{FF00}-\x{FFFD}\x{10000}-\x{10FFFF}]/) {
              $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
          }
          elsif ($forbidden_first_plus_space{ $first }) {
              if (length ($value) == 1 or substr($value, 1, 1) =~ m/^\s/) {
                  $style = YAML_SINGLE_QUOTED_SCALAR_STYLE;
              }
          }
      }
      if ($style == YAML_SINGLE_QUOTED_SCALAR_STYLE and not $info->{style}) {
          if ($value =~ tr/'// and $value !~ tr/"//) {
              $style = YAML_DOUBLE_QUOTED_SCALAR_STYLE;
          }
      }
  
      my $open_ended = 0;
  
      if ($style == YAML_PLAIN_SCALAR_STYLE) {
          $value =~ s/\n/\n\n/g;
      }
      elsif ($style == YAML_SINGLE_QUOTED_SCALAR_STYLE) {
          my $new_indent = $last->{indent} . (' ' x $self->indent);
          $value =~ s/(\n+)/"\n" x (1 + (length $1))/eg;
          my @lines = split m/\n/, $value, -1;
          if (@lines > 1) {
              for my $line (@lines[1 .. $#lines]) {
                  $line = $new_indent . $line
                      if length $line;
              }
          }
          $value = join "\n", @lines;
          $value =~ s/'/''/g;
          $value = "'" . $value . "'";
      }
      elsif ($style == YAML_LITERAL_SCALAR_STYLE) {
          DEBUG and warn __PACKAGE__.':'.__LINE__.$".Data::Dumper->Dump([\$value], ['value']);
          my $indicators = '';
          if ($value =~ m/\A\n* +/) {
              $indicators .= $self->indent;
          }
          my $indent = $indent . ' ' x $self->indent;
          if ($value !~ m/\n\z/) {
              $indicators .= '-';
              $value .= "\n";
          }
          elsif ($value =~ m/(\n|\A)\n\z/) {
              $indicators .= '+';
              $open_ended = 1;
          }
          $value =~ s/^(?=.)/$indent/gm;
          $value = "|$indicators\n$value";
      }
      elsif ($style == YAML_FOLDED_SCALAR_STYLE) {
          DEBUG and warn __PACKAGE__.':'.__LINE__.$".Data::Dumper->Dump([\$value], ['value']);
          my @lines = split /\n/, $value, -1;
          DEBUG and warn __PACKAGE__.':'.__LINE__.$".Data::Dumper->Dump([\@lines], ['lines']);
          my $eol = 0;
          my $indicators = '';
          if ($value =~ m/\A\n* +/) {
              $indicators .= $self->indent;
          }
          my $indent = $indent . ' ' x $self->indent;
          if ($lines[-1] eq '') {
              pop @lines;
              $eol = 1;
          }
          else {
              $indicators .= '-';
          }
          $value = ">$indicators\n";
          for my $i (0 .. $#lines) {
              my $line = $lines[ $i ];
              if (length $line) {
                  $value .= "$indent$line\n";
              }
              if ($i != $#lines) {
                  $value .= "\n";
              }
          }
      }
      else {
          $value =~ s/([$escape_re"\\])/$to_escape{ $1 } || sprintf '\\u%04x', ord($1)/eg;
          $value = '"' . $value . '"';
      }
  
      DEBUG and warn __PACKAGE__.':'.__LINE__.": (@$stack)\n";
      my $yaml = '';
      my $pvalue = $props;
      if ($props and length $value) {
          $pvalue .= " $value";
      }
      elsif (length $value) {
          $pvalue .= $value;
      }
      my $multiline = ($style == YAML_LITERAL_SCALAR_STYLE or $style == YAML_FOLDED_SCALAR_STYLE);
      my $newline = 0;
      if ($flow) {
          $indent = 0;
          if ($props and not length $value) {
              $pvalue .= ' ';
          }
          if ($last->{type} eq 'SEQ') {
              if ($last->{index} == 0) {
                  if ($self->column) {
                      $yaml .= ' ';
                  }
                  $yaml .= "[";
              }
              else {
                  $yaml .= ", ";
              }
          }
          elsif ($last->{type} eq 'MAP') {
              if ($last->{index} == 0) {
                  if ($self->column) {
                      $yaml .= ' ';
                  }
                  $yaml .= "{";
              }
              else {
                  $yaml .= ", ";
              }
              $last->{type} = 'MAPVALUE';
          }
          elsif ($last->{type} eq 'MAPVALUE') {
              if ($last->{index} == 0) {
                  die "Should not happen (index 0 in MAPVALUE)";
              }
              $yaml .= ": ";
              $last->{type} = 'MAP';
          }
          if ($self->column + length $pvalue > $self->width) {
              $yaml .= "\n";
              $yaml .= $last->{indent};
              $yaml .= ' ' x $self->indent;
          }
          $yaml .= $pvalue;
      }
      else {
          if ($last->{type} eq 'MAP' or $last->{type} eq 'SEQ') {
              if ($last->{index} == 0 and $last->{newline}) {
                  $yaml .= "\n";



( run in 1.474 second using v1.01-cache-2.11-cpan-df04353d9ac )