#!/usr/bin/perl -w ##----------------------------------------------------------------------------- ## This file is part of ctan-o-mat. ## This program is distributed under BSD-like license. See file LICENSE ## ## (c) 2016-2017 Gerd Neugebauer ## ## Net: gene@gerd-neugebauer.de ## ## This program is free software; you can redistribute it and/or modify it ## under the terms of a 3-clause BSD-like license as stated in the file ## LICENSE contained in this distribution. ## ## You should have received a copy of the LICENSE along with this program; if ## not, see the repository under https://github.com/ge-ne/ctan-o-mat. ## ##----------------------------------------------------------------------------- use strict; use constant MODE_NORMAL => 0; use constant MODE_PRE => 1; use constant MODE_AUTHOR => 10; #------------------------------------------------------------------------------ # Function: usage # Arguments: none # Returns: nothing # Description: Print the POD to stderr and exit # sub usage { use Pod::Text; Pod::Text->new() ->parse_from_filehandle( new FileHandle( $0, 'r' ), \*STDERR ); exit(0); } #------------------------------------------------------------------------------ # Variable: $verbose # Description: The verbosity indicator. # my $verbose = 0; my $version = ''; use Getopt::Long; GetOptions( "h|help" => \&usage, "version=s" => \$version, "v|verbose" => \$verbose, ); my $mode = MODE_NORMAL; my $body = ''; my $author = ''; my $title = ''; while(<>) { if (m/## AUTHOR/) { $mode = MODE_AUTHOR; next; } if ($mode == MODE_AUTHOR) { if (m/^##/) { $mode = MODE_NORMAL; } else { $author .= $_; next; } } next if m||; if (m/^```/) { if ($mode == MODE_NORMAL) { $mode = MODE_PRE; $body .= "\\begin{verbatim}\n"; } else { $mode = MODE_NORMAL; $body .= "\\end{verbatim}\n"; } next } if ($mode == MODE_PRE) { $body .= $_; next; } $_ = "\\subsection*{".ucfirst(lc($1))."}\\label{$1}" if m/^### (.*)/; $_ = "\\section*{".ucfirst(lc($1))."}\\label{$1}" if m/^## (.*)/; if (m/^# (.*)/) { $title = $1; $title =~ s/--/\\\\/; next; } $_ = "$`see section~\\ref{$1}$'" if m/see section ([a-z0-9]*)/i; while (m/`([^`]+)`/) { $_ = "$`\\texttt{$1}$'"; } while (m/\*([^*]+)\*/) { $_ = "$`\\textbf{$1}$'"; } s/
/\\begin{description}/; s/<\/dl>/\\end{description}/; s/(.*)<\/code>/\\texttt{$1}/; s/
/\\item[/; s/<\/dt>/]/; s/
/\\ \\\\/; s/ - / -- /; s/TeX /\\TeX{} /; s/(>|>)/\$>\$/; s/(<|<)/\$<\$/; s/_/\\_/g; s|https?://[.a-z\/-]*[a-z\/]|\\url{$&}|; s|mailto:([\@a-z-]*)|\\href{$&}{$1}|; $body .= $_; } my $author_long = ''; my $subject = ''; if ($title =~ m/ +-+ +/) { $title = $`; $subject = $'; } if ($author =~ m/\[([a-z0-9.,:; ]*)\]\(mailto:([^()]*)\)/i) { $author = $1; $author_long = "$1 (\\href{mailto:$2}{$2})"; } elsif ($author =~ m/\[([a-z0-9.,:; ]*)\]\(([^()]*)\)/i) { $author = $1; $author_long = "$1 ($2)"; } print <<__EOF__; \\documentclass[a4paper,12pt]{scrartcl} \\usepackage[colorlinks=true,urlcolor=blue]{hyperref} \\date{} \\hypersetup{ pdfinfo={ Title={$title}, Subject={$subject}, Author={$author} } } \\author{$author_long} \\title{$title\\thanks{This document describes \\textbf{$title} version $version}} \\subtitle{$subject} \\begin{document} \\maketitle $body \\end{document} __EOF__ #------------------------------------------------------------------------------ # Local Variables: # mode: perl # End: