App-zen

 view release on metacpan or  search on metacpan

bin/zen  view on Meta::CPAN

   
     my $short_title = latex_escape($section->{heading})
       . ($section->{max_line_id} > 1 ?
           "{\\tiny \[".($section->{max_line_id} - 1)."]}"
         : '');
   
     print "\\$level_name", "[$short_title]{",
        latex_escape($section->{heading}),
        ($section->{pattern} ?
          ' \\hfill{\\footnotesize \\texttt{['
          .   latex_escape($section->{pattern})
          . ']}~\\emph{'
          .   join(',', @params)
          . '}}'
          : ''),
        "} \\label{$id}\n";
   }
 
   my @lines = @{$section->{lines}};
   shift @lines;
   while (@lines > 0) {
     my $l = shift @lines;
     my $t = $l->{text};
 
     if ($l->{begin_block}) {
       if ($l->{begin_block}->{type} eq 'table') {
         my $blk = $l->{begin_block};
         my @rows = @{$blk->{rows}};
         print "\\begin{tabular}";
         print "{|", join("|", ('c') x scalar(@{$rows[0]})), "|}\n\\hline\n";
         if ($blk->{has_headers}) {
           my $headers = shift @rows;
           print join("&",@{$headers});
           print " \\\\\n\\hline\n\\hline\n";
         }
         
         for (@rows) {
           my $a = shift @rows;
           print join("&",@{$a});
           print " \\\\\n\\hline\n";
         }
         
         print "\\end{tabular}\n";
         while (@lines > 0) {
           $l = shift @lines;
           last if $l->{end_block};
         }
         
       } else {
         my $firstnum = ($num_listings == 0 ? 1 : 'last');
         my $caption = $l->{begin_block}->{name};
         my $lang = $l->{begin_block}->{lang};
         $lang = undef unless exists $latex_listing_supported_languages{$lang};
         
         if ($l->{begin_block}->{name}) {
           my $name = $l->{begin_block}->{name};
           print "\\vskip 0.5em \\noindent ";
           if ($name =~ m/^\+\[?([^]]*)/) {
             my $sec = find_section($1);
             my $caption = $sec->{heading};
             print '$[\\![$\\textbf{', latex_escape($caption), '}$]\\!] +\\!\\!\\equiv$';
           } elsif ($name =~ m/^>(.*)/) {
             print '$\\langle$\\textbf{',latex_escape($1), '}$\\rangle\\equiv$';
           } else {
             print "\\{\\textbf{",latex_escape($name),'}\\}$\\equiv$';
           }
         }
         
         my $options = "firstnumber=$firstnum";
         $options .= ",language=$lang" if $lang;
         print "\\begin{lstlisting}[$options]\n";
         
         $num_listings++;
         
         while (@lines > 0) {
           $l = shift @lines;
           $t = $l->{text};
           my $label;
         
           last if $l->{end_block};
         
           if ($t =~ m/$re_ln_label/) {
             $t = $`;
             $label = $1;
           }
         
           if ($t =~ m/^(\s*)\[\[(.*)]]\s*$/) {
             my $spaces = $1;
             my @names = split /;/, $2;
             print $spaces, "/*", '!$[\\![$';
             my $n = 0;
             foreach (@names) {
               $n++;
               my ($name, $params) = split /:/,trim($_);
               my $section = find_section($name);
               my $id = $section->{id};
               if ($section->{pattern} && !$params && @{$section->{params}} > 0) {
                 my $pat = $section->{pattern};
                 my @vals = ($name =~ /^$pat$/g);
                 $params = join(',', @vals);
               }
               if ($params) {
                 $params = "{(" . latex_escape($params) . ")}";
               }
               print "; " if $n > 1;
               if (scalar(@names)==1) {
                 print "\\textrm{{",latex_escape($section->{heading}),"}}$params",
                   " {\\scriptsize \\pageref{$id}}";
               } else {
                 $name = latex_escape($name);
                 print "\\textrm{{$name}}$params {\\scriptsize \\pageref{$id}}";
               }
             }
             print '$]\\!]$', "!*/";
           } elsif($t =~ m/^(\s*)\.label\s+(.*)/) {
             my $name = $2;
             my $lab = find_label($name, $section);
             print '/*',"!\\label{$lab->{id}}!*/";
           } elsif($t =~ m/^(\s*)`([`.[].*)/) {
             print $1,$2;
           } else {
             print $t;
           }
         
           if ($label) {
             my $lab = find_label($label, $section);
             print '/*',"!\\label{$lab->{id}}!*/";
           }
           print "\n";
         }
         print "\\end","{lstlisting}\n";
       }
     } elsif ($t =~ m/^(```+)(\w+)?\s+%(.*)/) {
       my $backticks = $1;
       my $lang = $2;
       my $cmd = $3;
       my @a = ();
       while (@lines > 0) {
         my $l = shift @lines;
         last if ($l->{text} =~ m/^$backticks\s*$/);
         push @a, expand1($l);
       }
       my $src = join("\n", map {$_->{text}} xtrim(@a));
       my $input_file;
       my $output_file;
       my $dir = 'tmp';
       if ( !-d  $dir) {
           make_path $dir or die "Failed to create path: $dir";
       }
       



( run in 1.084 second using v1.01-cache-2.11-cpan-302cb4679cc )