/usr/share/perl5/Text/Markup/Asciidoc.pm is in libtext-markup-perl 0.23-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | package Text::Markup::Asciidoc;
use 5.8.1;
use strict;
use File::Spec;
use constant WIN32 => $^O eq 'MSWin32';
use Symbol 'gensym';
use IPC::Open3;
use utf8;
our $VERSION = '0.23';
# Find Asciidoc.
my $ASCIIDOC;
FIND: {
my @path = (
File::Spec->path,
WIN32 ? (map { "C:\\asciidoc$_" } '', '-8.6.6') : ()
);
EXE: {
for my $exe (qw(asciidoc asciidoc.py)) {
for my $p (@path) {
my $path = File::Spec->catfile($p, $exe);
next unless -f $path && -x $path;
$ASCIIDOC = $path;
last EXE;
}
}
}
unless ($ASCIIDOC) {
use Carp;
my $sep = WIN32 ? ';' : ':';
Carp::croak(
"Cannot find asciidoc or asciidoc.py in path " . join $sep => @path
);
}
# Make sure it looks like it will work.
my $output = gensym;
my $pid = open3 undef, $output, $output, $ASCIIDOC, '--version';
waitpid $pid, 0;
if ($?) {
use Carp;
local $/;
Carp::croak(
qq{$ASCIIDOC will not execute\n},
<$output>
);
}
}
# Arguments to pass to asciidoc.
# Restore --safe if Asciidoc ever fixes it with the XHTML back end.
# https://groups.google.com/forum/#!topic/asciidoc/yEr5PqHm4-o
my @OPTIONS = qw(
--no-header-footer
--out-file -
--attribute newline=\\n
);
sub parser {
my ($file, $encoding, $opts) = @_;
my $html = do {
my $fh = _fh(
$ASCIIDOC, @OPTIONS,
'--attribute' => "encoding=$encoding",
$file
);
binmode $fh, ":encoding($encoding)";
local $/;
<$fh>;
};
# Make sure we have something.
return unless $html =~ /\S/;
utf8::encode $html;
return qq{<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
$html
</body>
</html>
};
}
# Stolen from SVN::Notify.
sub _fh {
# Ignored; looks like docutils always emits UTF-8.
if (WIN32) {
my $cmd = join join(q{" "}, @_) . q{"|};
open my $fh, $cmd or die "Cannot fork: $!\n";
return $fh;
}
my $pid = open my $fh, '-|';
die "Cannot fork: $!\n" unless defined $pid;
if ($pid) {
# Parent process, return the file handle.
return $fh;
} else {
# Child process. Execute the commands.
exec @_ or die "Cannot exec $_[0]: $!\n";
# Not reached.
}
}
1;
__END__
=head1 Name
Text::Markup::Asciidoc - Asciidoc parser for Text::Markup
=head1 Synopsis
use Text::Markup;
my $html = Text::Markup->new->parse(file => 'hello.adoc');
=head1 Description
This is the L<Asciidoc|http://www.methods.co.nz/asciidoc/> parser for
L<Text::Markup>. It depends on the C<asciidoc> command-line application, for
which there are many
L<binary distributions|http://www.methods.co.nz/asciidoc/INSTALL.html>. It
recognizes files with the following extensions as Asciidoc:
=over
=item F<.asciidoc>
=item F<.asc>
=item F<.adoc>
=back
=head1 Author
David E. Wheeler <david@justatheory.com>
=head1 Copyright and License
Copyright (c) 2012-2014 David E. Wheeler. Some Rights Reserved.
This module is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
=cut
|