From 4d0226ef3ee223d5ef5e5fa5b471665ba27d0a92 Mon Sep 17 00:00:00 2001
From: Ruben Rodriguez
Date: Tue, 26 Mar 2019 18:12:50 -0400
Subject: [PATCH] ubuntu-release-upgrader: fixed build error
---
.../DATA/ubuntu-release-upgrader/parsewiki | 1017 +++++++++++++++++
helpers/make-ubuntu-release-upgrader | 6 +-
2 files changed, 1020 insertions(+), 3 deletions(-)
create mode 100755 helpers/DATA/ubuntu-release-upgrader/parsewiki
diff --git a/helpers/DATA/ubuntu-release-upgrader/parsewiki b/helpers/DATA/ubuntu-release-upgrader/parsewiki
new file mode 100755
index 0000000..161c593
--- /dev/null
+++ b/helpers/DATA/ubuntu-release-upgrader/parsewiki
@@ -0,0 +1,1017 @@
+#!/usr/bin/perl
+# $Id: parsewiki,v 1.29 2002/10/08 17:23:05 villate Exp $
+
+# parsewiki - Parses a text file, with formatting such as that used in a Wiki
+
+sub Copying
+{
+print <<'EndTerms';
+ Copyright (C) 2002 Jaime Villate
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License
+ as published by the Free Software Foundation; either version 2
+ of the License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+ Some of the subroutines used are based on the Use Mod Wiki script
+ , version 0.92 (April 21, 2001)
+ by Clifford A. Adams
+
+EndTerms
+exit;
+}
+sub Usage
+{
+ print STDERR <<"EndUsage";
+Usage: $0 [OPTION]... [FILE]
+
+Options:
+ -f, --format=FORMAT Output format; one of html, xhtml, docbook, latex.
+ (default html)
+ -T, --title=TITLE Title.
+ -t, --template=FILE File with a template to use instead of thestandard.
+ -c, --copyright Display copyright and copying permission statement.
+ -h, --help Show this usage summary.
+
+FILE is a simple text file with wiki formating syntax. The result will be
+sent to the Standard Output. If FILE is not given, input will be taken from
+the Standard Input.
+
+Examples:
+ $0 myfile.wiki
+ cat file.txt | $0 -fdocbook --title="An Example" >file.xml
+
+Report bugs to .
+EndUsage
+ exit 1;
+}
+
+use strict;
+use vars qw($SaveUrlIndex $UrlProtocols $UrlPattern $authorcount $figcount
+ $UrlProtocols2 $UrlPattern2 $ImageExtensions $FS $frontmatter
+ $FreeLinkPattern $IndentLimit $language $Format $Template
+ $title $lang $babel $LT $GT $BL $BR $firstheading $Languages
+ $Titles $Authors $Orgs $Addresses $Dates $Versions $Abstracts
+ $Figures @Title @Author @Org @Address @Date @Version @Abstract
+ @Figure @Language @BabelLang @Tag %SaveUrl %OpenTag %CloseTag
+ %OpenItem %CloseItem %Meta %LangCode $Revision $LF);
+
+# Configuration variables and Default options
+%SaveUrl = ();
+$SaveUrlIndex = 0;
+$authorcount = 0;
+@Tag = qw(ul ol dl pre em strong code img a p dt);
+%OpenItem = qw(ol ul dl );
+%CloseItem = qw(ol ul dl );
+$Format = 'html';
+$Revision = q($Revision: 1.29 $);
+
+my $file = &GetOpts(); # Process command line options
+
+# Set up output format
+$_ = $Format;
+FORMAT:
+{
+ if (/^html$/i) { &SetUpHTML; last FORMAT}
+ if (/^xhtml$/i) { &SetUpXHTML; last FORMAT}
+ if (/^docbook$/i) { &SetUpDB; last FORMAT}
+ if (/^latex$/i) { &SetUpLatex; last FORMAT}
+ die "$0: Unknown format \"$Format\"\n\n";
+}
+
+# Get input file
+open (IN,"<$file") or die "$0: Cannot read file $file\n\n" ;
+undef $/;
+my $page = ;
+close IN;
+
+&InitLinkPatterns();
+&InitLangTables();
+$page =~ s/([^\\])\\\\\r?\n/$1$FS$FS/go; # Encode paragraph breaks
+$page =~ s/([^\\])\\\r?\n/$1 /g; # Join (text) lines ending in backslash
+($firstheading) = ($page =~ /=\s+([^=]*)\s+=/);
+if ($Format =~ /latex/i)
+{
+ $page = &QuoteLatex1($page);
+}
+else
+{
+ $page = &QuoteHtml($page);
+}
+$page = &CommonMarkup($page, 1, 0); # Multi-line markup
+$page = &WikiLinesToHtml($page); # Line-oriented markup
+
+# Get the title, if not defined by a command-line option
+$title = $Meta{'title'} if ($Meta{'title'} && !$title);
+$title = $firstheading unless $title;
+$babel = $BabelLang[$language];
+$lang = ' lang="' . $Meta{language} . '"' if ($Meta{language});
+
+$_ = $Format;
+FORMAT:
+{
+ if (/^html$/i) { &SetHTMLFront; last FORMAT }
+ if (/^xhtml$/i) { &SetXHTMLFront; last FORMAT }
+ if (/^docbook$/i) { &SetDBFront; last FORMAT }
+ if (/^latex$/i) { &SetLatexFront }
+}
+
+$page =~ s/$FS$FS/\\\\$LF/g; # Decode \\ which are not paragraph breaks
+$page =~ s/$FS(\d+)$FS/$SaveUrl{$1}/ge; # Restore saved text
+$page =~ s/$FS(\d+)$FS/$SaveUrl{$1}/ge; # Restore nested saved text
+
+# The following statement will fail if $Template has unmatched parentheses
+# and will silently fail if the referred variables are undefined.
+print eval("qq($Template)");
+exit 0;
+
+sub WikiLinesToHtml
+{
+ my ($pageText) = @_;
+ my ($pageHtml, @htmlStack, $code, $depth, $oldCode, $oldDepth);
+ my ($hDepth, $oldhDepth, $index, $flag, $line);
+
+ @htmlStack = ();
+ $depth = 0;
+ $hDepth = 0;
+ $pageHtml = "";
+ $flag = 1;
+ $IndentLimit = 6 if ( $IndentLimit < 1);
+
+ # Process lines one-at-a-time
+ foreach $line (split(/\n/, $pageText))
+ {
+ # Search for meta-info lines
+ if ($flag > 0)
+ {
+ next if ($line =~ /^\s*$/);
+ if ($line =~ s/\s*(?:$BL)([^\s:]+):\s*(.+)(?:$BR)\s*$//o)
+ {
+ &StoreMeta($1, $2);
+ next;
+ }
+ else
+ {
+ $flag = 0;
+ }
+ }
+
+ # Process main text lines
+ $line .= "\n" unless ($line =~ /^\s*$/);
+ $oldDepth = $depth;
+ $depth = 0;
+ $oldhDepth = $hDepth;
+ $_ = $line;
+
+ # Process lines with special characters on the first column
+ CODE:
+ {
+ # Descriptive lists
+ if (s/^(\;+)\s*([^:]+\:?)\: */$OpenTag{dt}$2$CloseTag{dt}\n$OpenItem{dl}/)
+ {
+ $code = "dl";
+ $depth = length $1;
+ last CODE;
+ }
+ if (s/^(\:+) */$OpenTag{dt}$CloseTag{dt}\n<$OpenItem{dl}/)
+ {
+ $code = "dl";
+ $depth = length $1;
+ last CODE;
+ }
+ # Itemized lists
+ if (s/^(\*+) */$OpenItem{ul}/)
+ {
+ $code = "ul";
+ $depth = length $1;
+ last CODE;
+ }
+ # Ordered lists
+ if (s/^(\#+) */$OpenItem{ol}/)
+ {
+ $code = "ol";
+ $depth = length $1;
+ last CODE;
+ }
+ # Verbatim environment
+ if (/^[ \t].*\S/)
+ {
+ $code = "pre";
+ $depth = 1;
+ last CODE;
+ }
+ # Text line
+ if (/^[^\s\=]/)
+ {
+ $code = "p";
+ $depth = 1;
+ last CODE;
+ }
+ # Section headings
+ if (s/^(\=+)\s*([^\=]+)\s*\=+/&WikiHeading($1, $2)/e)
+ {
+ $hDepth = length $1;
+ $code = "h$depth";
+ last CODE;
+ }
+ # New paragraph
+ if (/^\s*$/)
+ {
+ $code = '';
+ }
+ }
+ # Close elements as needed
+ while (@htmlStack > $depth)
+ {
+ $oldCode = pop(@htmlStack);
+ if ($oldCode =~ /^[dou]l$/)
+ {
+ $pageHtml =~ s/\n$/$CloseItem{$oldCode}\n/;
+ }
+ $pageHtml .= $CloseTag{$oldCode} . "\n";
+ }
+
+ # Open or close new sections as needed
+ if ($hDepth > $oldhDepth)
+ {
+ while ($hDepth > $oldhDepth )
+ {
+ $oldhDepth++;
+ $pageHtml .= $OpenTag{'h'.$oldhDepth} . "\n";
+ $pageHtml .= $OpenItem{'h'.$oldhDepth} .
+ $CloseItem{'h'.$oldhDepth} . "\n"
+ unless ($hDepth == $oldhDepth );
+ }
+ }
+ elsif ($hDepth < $oldhDepth)
+ {
+ while ($hDepth <= $oldhDepth )
+ {
+ $pageHtml .= $CloseTag{'h'.$oldhDepth} . "\n";
+ $oldhDepth--;
+ }
+ $pageHtml .= $OpenTag{'h'.$hDepth};
+ }
+ elsif ($code =~ /h\d/)
+ {
+ $pageHtml .= $CloseTag{'h'.$hDepth} . "\n" . $OpenTag{'h'.$hDepth};
+ }
+
+ # Parse paragraphs and lists
+ if ($depth > 0)
+ {
+ $depth = $IndentLimit if ($depth > $IndentLimit);
+ if (@htmlStack)
+ {
+ # Non-empty stack
+ $oldCode = pop(@htmlStack);
+ if ($depth > $oldDepth)
+ {
+ # Start a nested list
+ push(@htmlStack, $oldCode);
+ $pageHtml .= "$OpenTag{$code}\n";
+ if (($depth - $oldDepth) > 1)
+ {
+ $pageHtml .= $OpenItem{$code} . "\n";
+ }
+ }
+ else
+ {
+ if ($oldCode =~ /^[dou]l$/)
+ {
+ $pageHtml =~ s/\n$/$CloseItem{$oldCode}\n/;
+ }
+ if ($oldCode ne $code)
+ {
+ $pageHtml .= "$CloseTag{$oldCode}\n$OpenTag{$code}\n";
+ }
+ }
+ push(@htmlStack, $code);
+ }
+
+ # Fill up stack as needed
+ while (@htmlStack < $depth)
+ {
+ push(@htmlStack, $code);
+ $pageHtml .= $OpenTag{$code} . "\n";
+ if ($code =~ /^[dou]l$/ && $depth > @htmlStack)
+ {
+ $pageHtml .= $OpenItem{$code} . "\n";
+ }
+ }
+ }
+
+ # Parse line-oriented common markup
+ unless (/^\s*$/)
+ {
+ $line = &CommonMarkup($_, 1, 2);
+ $line = &QuoteLatex2($line) if ($Format =~ /latex/i && $code !~ /pre/);
+ if ($code =~ /^[dou]l$/)
+ {
+ $line =~ s/$FS$FS/$CloseTag{p}\n$OpenTag{p}\n/go; # par. breaks
+ }
+ $pageHtml .= $line;
+ }
+ }
+
+ while (@htmlStack > 0)
+ {
+ # Clear stack
+ $oldCode = pop(@htmlStack);
+ if ($oldCode =~ /^[dou]l$/)
+ {
+ $pageHtml =~ s/\n$/$CloseItem{$oldCode}\n/;
+ }
+ $pageHtml .= $CloseTag{$oldCode} . "\n";
+ }
+
+ # Close open sections
+ while ($hDepth > 0)
+ {
+ $pageHtml .= $CloseTag{'h'.$hDepth} . "\n";
+ $hDepth--;
+ }
+ return $pageHtml;
+}
+
+sub CommonMarkup
+{
+ my ($text, $useImage, $doLines) = @_;
+ local $_ = $text;
+
+ if ($doLines < 2)
+ { # HTML tags that should be replaced before other tags are
+ # inserted into the text, to avoid mixing them up.
+ s/(?:$LT)pre$GT((.|\n)*?)$LT\/pre$GT/&StorePre($1, "pre")/igeo;
+ s/(?:$LT)code$GT((.|\n)*?)$LT\/code$GT/&StorePre($1, "code")/igeo;
+ # Note that these tags are restricted to a single line
+ s/(?:$LT)b$GT(.*?)$LT\/b$GT/$OpenTag{strong}$1$CloseTag{strong}/gio;
+ s/(?:$LT)i$GT(.*?)$LT\/i$GT/$OpenTag{em}$1$CloseTag{em}/gio;
+ s/(?:$LT)strong$GT(.*?)$LT\/strong$GT/$OpenTag{strong}$1$CloseTag{strong}/gio;
+ s/(?:$LT)em$GT(.*?)$LT\/em$GT/$OpenTag{em}$1$CloseTag{em}/gio;
+ s/(?:$LT)tt$GT(.*?)$LT\/tt$GT/$OpenTag{code}$1$CloseTag{code}/gio;
+ s/\[$UrlPattern\s+([^\]]+?)\]/&StoreBracketUrl($1, $2)/geos;
+ s/\[$UrlPattern\]/&StoreBracketUrl($1, "")/geo;
+ if ($Format =~ /^html$/i)
+ {
+ s/$UrlPattern2/&StoreUrl($1, $useImage)/geo;
+ } else {
+ s/$UrlPattern2/&StoreUrl($1, 0)/geo;
+ }
+ s/\[\[$FreeLinkPattern\s+([^\]]+?)\]\]/&StoreBracketUrl($1, $2)/geo;
+ s/\[\[$FreeLinkPattern\]\]/&StoreUrl($1, $useImage)/geo;
+ }
+ if ($doLines)
+# TO DO: these substitutions should not be made inside the "pre" environment
+
+ { # 0 = before other tags are inserted, 1 or 2 = after that
+ # TO DO: The quote markup patterns avoid overlapping tags (with 5 quotes)
+ # by matching the inner quotes for the strong pattern.
+# s/(\'*)\'\'\'(.*?)\'\'\'/$1$OpenTag{strong}$2$CloseTag{strong}/go;
+ s/\'\'\'(.*?)\'\'\'/&TagText($1,'strong')/ge;
+ s/''(.*?)''/&TagText($1,'em')/ge;
+ s/,,(.*?),,/&TagText($1,'code')/ge;
+ }
+ return $_;
+}
+
+sub WikiHeading
+{
+ my ($depth, $text) = @_;
+ $depth = length($depth);
+ $depth = 5 if ($depth > 5);
+ return $OpenItem{'h'.$depth} . $text . $CloseItem{'h'.$depth} . "\n";
+}
+
+sub QuoteLatex1
+{
+ my ($html) = @_;
+ my $text = '';
+ $BL = '\\\{';
+ $BR = '\\\}';
+ foreach (split(/\n/, $html))
+ {
+ if (/^\S/)
+ {
+ s/\\/\\ensuremath$FS\\backslash$FS/go;
+ s/\{/\\{/g;
+ s/\}/\\}/g;
+ s/$FS(\\backslash)$FS/\{$1\}/go;
+ }
+ $text .= $_ . "\n";
+ }
+ return $text;
+}
+
+sub QuoteLatex2
+{
+ my ($html) = @_;
+ $_ = $html;
+ s/&/\\&/g;
+ s/#/\\#/g;
+ s/%/\\%/g;
+ s/_/\\_/g;
+ s/\$/\\\$/g;
+ s/\^/\\^{}/g;
+ s/~/\\~{}/g;
+ s/>/\\ensuremath{>}/g;
+ s/\\ensuremath{<}/g;
+ return $_;
+}
+
+sub QuoteHtml
+{
+ my ($html) = @_;
+ $html =~ s/&/&/g;
+ $html =~ s/</g;
+ $html =~ s/>/>/g;
+# $html =~ s/&([\#a-zA-Z0-9]+);/&$1;/g; # Allow character references
+ $LT = '<';
+ $GT = 'gt;';
+ return $html;
+}
+
+sub InitLinkPatterns
+{
+ # Field separators are used in the URL-style patterns below.
+ $FS = "\xb3"; # The FS character is a superscript "3"
+ $LT = '<';
+ $GT = '>';
+ $BL = '{';
+ $BR = '}';
+ $LF = "\n";
+
+ # Url-style links are delimited by one of:
+ # 1. Whitespace (kept in output)
+ # 2. Left or right angle-bracket (< or >) (kept in output)
+ # 3. Right square-bracket (]) (kept in output)
+ # 4. A single double-quote (") (kept in output)
+ # 5. A $FS (field separator) character (kept in output)
+
+ $UrlProtocols = "http|https|ftp|afs|news|nntp|mid|cid|mailto|wais|"
+ . "prospero|telnet|gopher";
+ $UrlPattern = "((?:(?:$UrlProtocols):[^\\]\\s\"$FS]+))";
+ $UrlProtocols2 = "http|https|ftp";
+ $UrlPattern2 = "((?:(?:$UrlProtocols2):[^\\]\\s\"$FS]+))";
+ $ImageExtensions = "(gif|jpg|png|bmp|jpeg|ico)";
+ $FreeLinkPattern = "([-,.()\/'_0-9A-Za-z\xc0-\xff]+)";
+}
+
+sub InitLangTables
+{
+ $language = 0;
+ $babel = 'english';
+ @BabelLang = qw(english spanish portuges);
+ %LangCode = qw(en 0 es 1 pt 2);
+ $Languages = 'language idioma língua';
+ $Titles = 'title título título';
+ $Authors = 'author autor autor';
+ $Orgs = 'organization organización organização';
+ $Addresses = 'address dirección endereço';
+ $Dates = 'date fecha data';
+ $Versions = 'version versión versão';
+ $Abstracts = 'abstract resumen resumo';
+ $Figures = 'Figure Figura Figura';
+ @Language = split(/ /,$Languages);
+ @Title = split(/ /,$Titles);
+ @Author = split(/ /,$Authors);
+ @Org = split(/ /,$Orgs);
+ @Address = split(/ /,$Addresses);
+ @Date = split(/ /,$Dates);
+ @Version = split(/ /,$Versions);
+ @Abstract = split(/ /,$Abstracts);
+ @Figure = split(/ /,$Figures);
+}
+
+sub StoreMeta
+{
+ my ($name, $content) = @_;
+ if ($Languages =~ /$name/i)
+ {
+ $language = $LangCode{$content} if ($LangCode{$content});
+ $Meta{language} = $content;
+ }
+ $content = &CommonMarkup($content, 1, 2);
+ $content = &QuoteLatex2($content) if ($Format =~ /latex/i);
+ $content =~ s/$FS(\d+)$FS/$SaveUrl{$1}/ge; # Restore saved text
+ $content =~ s/$FS(\d+)$FS/$SaveUrl{$1}/ge; # Restore nested saved text
+ META:
+ {
+ if ($Titles =~ /$name/i)
+ {
+ $Meta{title} = $content;
+ next META;
+ }
+ if ($Authors =~ /$name/i)
+ {
+ $Meta{author}[$authorcount] = $content;
+ $Meta{organization}[$authorcount] = '';
+ $Meta{address}[$authorcount] = '';
+ $authorcount++;
+ next META;
+ }
+ if ($Orgs =~ /$name/i)
+ {
+ $authorcount = 1 if ($authorcount < 1);
+ $Meta{organization}[$authorcount-1] = $content;
+ next META;
+ }
+ if ($Addresses =~ /$name/i)
+ {
+ $authorcount = 1 if ($authorcount < 1);
+ $Meta{address}[$authorcount-1] = $content;
+ next META;
+ }
+ if ($Dates =~ /$name/i)
+ {
+ $Meta{date} = $content;
+ next META;
+ }
+ if ($Versions =~ /$name/i)
+ {
+ $Meta{version} = $content;
+ next META;
+ }
+ if ($Abstracts =~ /$name/i)
+ {
+ $content =~ s/$FS$FS/$CloseTag{p}\n$OpenTag{p}\n/go; # par. breaks
+ $Meta{abstract} = $content;
+ next META;
+ }
+ $Meta{lc($name)} = $content;
+ }
+ return '';
+}
+
+sub TagText
+{
+ my ($text, $element) = @_;
+ my $result;
+ if ($Format =~ /latex/i)
+ {
+ $_ = $text;
+ LOOP:
+ {
+ if (/\G([^$FS]+)/goc)
+ {
+ $result .= "$OpenTag{$element}$1$CloseTag{$element}";
+ redo LOOP;
+ }
+ if (/\G$FS(\d+)$FS/goc)
+ {
+ $result .= "$FS$1$FS";
+ &TagURL($1,$element);
+ redo LOOP;
+ }
+ return $result;
+ }
+ }
+ else
+ {
+ $result = $OpenTag{$element} . $text . $CloseTag{$element};
+ return $result;
+ }
+}
+
+sub TagURL
+{
+ my ($index, $element) = @_;
+ $SaveUrl{$index} =~ s/(\\href\{[^\}]*\})\{([^\}]*)\}/$1\{$OpenTag{$element}$2$CloseTag{$element}\}/;
+ return $FS . $index . $FS;
+}
+
+sub StoreRaw
+{
+ my ($html) = @_;
+
+ $SaveUrl{$SaveUrlIndex} = $html;
+ return $FS . $SaveUrlIndex++ . $FS;
+}
+
+sub StoreUrl
+{
+ my ($name, $useImage) = @_;
+ my ($link, $extra);
+
+ ($link, $extra) = &UrlLink($name, $useImage);
+ # Next line ensures no empty links are stored
+ $link = &StoreRaw($link) if ($link ne "");
+ return $link . $extra;
+}
+
+sub UrlLink
+{
+ my ($rawname, $useImage) = @_;
+ my ($name, $punct, $format, $text);
+ ($name, $punct) = &SplitUrlPunct($rawname);
+ $text = $name;
+ $text = &QuoteLatex2($text) if ($Format =~ /latex/i);
+ if ($useImage && ($name =~ /\.$ImageExtensions$/))
+ {
+ $name =~ /\.([^\.]+)$/;
+ $format = uc($1);
+ $name =~ s/\.[^\.]+$// if ($Format =~ /latex/i);
+ return (eval("qq($OpenTag{img})"), $punct);
+ }
+ return (eval("qq($OpenTag{a})") . $text . $CloseTag{'a'}, $punct);
+}
+
+sub StoreBracketUrl
+{
+ my ($name, $text) = @_;
+ $text = $name if ($text eq "");
+ $text = &QuoteLatex2($text) if ($Format =~ /latex/i);
+ return &StoreRaw(eval("qq($OpenTag{a})") . $text . $CloseTag{'a'});
+}
+
+sub SplitUrlPunct
+{
+ my ($url) = @_;
+ my ($punct);
+ $url =~ s/\<//g;
+ $url =~ s/\&/&/g;
+ $punct = "";
+ ($punct) = ($url =~ /([^a-zA-Z0-9\/\xc0-\xff\%\#\?\&\+\_\~]+)$/);
+ $url =~ s/([^a-zA-Z0-9\/\xc0-\xff\%\#\?\&\+\_\~]+)$//;
+ unless ($Format =~ /latex/i)
+ {
+ $url =~ s/\&/&/g;
+ $punct =~ s/</g;
+ $punct =~ s/>/>/g;
+ }
+ return ($url, $punct);
+}
+
+sub SetUpHTML
+{
+ my $index;
+ my @htmltag = @Tag;
+ foreach $index (0..$#Tag)
+ {
+ $OpenTag{$Tag[$index]} = '<' . $htmltag[$index] . '>';
+ $CloseTag{$Tag[$index]} = '' . $htmltag[$index] . '>';
+ }
+ $OpenTag{img} = '
';
+ $OpenTag{a} = '';
+ %OpenItem = qw(ol ul
dl
);
+ %CloseItem = qw(ol
ul
dl );
+ foreach $index (1..5)
+ {
+ $OpenTag{'h'.$index} = '';
+ $CloseTag{'h'.$index} = '';
+ $OpenItem{'h'.$index} = '';
+ $CloseItem{'h'.$index} = '';
+ }
+ unless ($Template)
+ {
+ $Template = <<' EndHTML';
+
+
+
+
+$title
+
+
+$frontmatter
+$page
+
+
+ EndHTML
+ }
+}
+
+sub SetUpXHTML
+{
+ my $index;
+ my @xhtmltag = @Tag;
+ foreach $index (0..$#Tag)
+ {
+ $OpenTag{$Tag[$index]} = '<' . $xhtmltag[$index] . '>';
+ $CloseTag{$Tag[$index]} = '' . $xhtmltag[$index] . '>';
+ }
+ $OpenTag{img} = '
';
+ $OpenTag{a} = '';
+ %OpenItem = qw(ol ul
dl
);
+ %CloseItem = qw(ol
ul dl );
+ foreach $index (1..5)
+ {
+ $OpenTag{'h'.$index} = '';
+ $CloseTag{'h'.$index} = '';
+ $OpenItem{'h'.$index} = '';
+ $CloseItem{'h'.$index} = '';
+ }
+ unless ($Template)
+ {
+ $Template = <<' EndXHTML';
+
+
+
+
+
+$title
+
+
+$frontmatter
+$page
+
+
+ EndXHTML
+ }
+}
+
+sub SetUpDB
+{
+ my $index;
+ my @dbtag = qw(itemizedlist orderedlist variablelist programlisting
+ emphasis emphasis literal inlinegraphic ulink para term);
+ foreach $index (0..$#Tag)
+ {
+ $OpenTag{$Tag[$index]} = '<' . $dbtag[$index] . '>';
+ $CloseTag{$Tag[$index]} = '' . $dbtag[$index] . '>';
+ }
+ $OpenTag{dt} = '';
+ $OpenTag{strong} = '';
+ $OpenTag{img} = '';
+ $OpenTag{a} = '';
+ %OpenItem = qw(ol ul
+ dl );
+ %CloseItem = qw(ol ul
+ dl );
+ foreach $index (1..5)
+ {
+ $OpenTag{'h'.$index} = '';
+ $CloseTag{'h'.$index} = '';
+ $OpenItem{'h'.$index} = '';
+ $CloseItem{'h'.$index} = '';
+ }
+ unless ($Template)
+ {
+ $Template = <<' EndDB';
+
+
+
+
+
+$frontmatter
+
+$page
+
+ EndDB
+ }
+}
+
+sub SetUpLatex
+{
+ my $index;
+@Tag = qw(ul ol dl pre em strong code img a p dt);
+ my @latextag = qw(itemize enumerate description verbatim emph textbf
+ texttt);
+ foreach $index (0..2)
+ {
+ $OpenTag{$Tag[$index]} = "\\begin\{" . $latextag[$index] . '}';
+ $CloseTag{$Tag[$index]} = "\\end\{" . $latextag[$index] . '}';
+ }
+ foreach $index (4..8)
+ {
+ $OpenTag{$Tag[$index]} = "\\$latextag[$index]\{";
+ $CloseTag{$Tag[$index]} = "\}";
+ }
+ $OpenTag{p} = '';
+ $CloseTag{p} = '';
+ $OpenTag{dt} = '\item[';
+ $CloseTag{dt} = ']';
+ $OpenTag{pre} = '\begin{small}\begin{verbatim}';
+ $CloseTag{pre} = '\end{verbatim}\end{small}';
+ $OpenTag{img} = '\\\\includegraphics\{$name\}';
+ $OpenTag{a} = '\\\\href\{$name\}\{';
+ $CloseTag{a} = '}';
+ %OpenItem = ('ol', '\item ', 'ul', '\item ', 'dl', '');
+ %CloseItem = ('ol', '', 'ul', '', 'dl', '');
+ $OpenItem{h1} = '\section{';
+ $OpenItem{h2} = '\subsection{';
+ $OpenItem{h3} = '\subsubsection{';
+ $OpenItem{h4} = '\paragraph{';
+ $OpenItem{h5} = '\subparagraph{';
+ foreach $index (1..5)
+ {
+ $OpenTag{'h'.$index} = '';
+ $CloseTag{'h'.$index} = '';
+ $CloseItem{'h'.$index} = '}';
+ }
+ unless ($Template)
+ {
+ $Template = <<' EndLatex';
+% Created by parsewiki $Revision
+\\documentclass\[12pt,a4paper\]\{article\}
+\\usepackage\[latin1\]\{inputenc\}
+\\usepackage\[$babel\]\{babel\}
+\\usepackage\{graphicx\}
+\\usepackage\[colorlinks=true,urlcolor=blue\]\{hyperref\}
+\\setlength\{\\oddsidemargin\}\{9pt\}
+\\setlength\{\\textwidth\}\{425pt\}
+\\setlength\{\\evensidemargin\}\{23pt\}
+\\setlength\{\\topmargin\}\{28pt\}
+\\setlength\{\\headheight\}\{17pt\}
+\\setlength\{\\headsep\}\{14pt\}
+\\setlength\{\\textheight\}\{45\\baselineskip\}
+\\setlength\{\\footskip\}\{26pt\}
+
+\\begin\{document\}
+$frontmatter
+$page
+\\end\{document\}
+ EndLatex
+ }
+}
+
+sub SetHTMLFront
+{
+ $frontmatter .= "$title
\n"
+ if ($title && ($title ne $firstheading));
+ if ($authorcount > 0)
+ {
+ for my $index (1..$authorcount)
+ {
+ $frontmatter .= "$Meta{author}[$index-1]
\n";
+ $frontmatter .= "$Meta{organization}[$index-1]
\n"
+ if ($Meta{organization}[$index-1]);
+ $frontmatter .= "$Meta{address}[$index-1]
\n"
+ if ($Meta{address}[$index-1]);
+ }
+ }
+ $frontmatter .= "
$Version[$language] $Meta{version}
\n"
+ if ($Meta{version});
+ $frontmatter .= "
$Meta{date}
\n" if ($Meta{date});
+ $frontmatter = "$frontmatter
\n"
+ if ($frontmatter);
+ if ($Meta{abstract})
+ {
+ $Meta{abstract} =~ s/$FS$FS/<\/p>\n/g;
+ $frontmatter .="
\n$Meta{abstract}
\n
\n";
+ }
+ $frontmatter .= "
$Meta{copyright}
\n"
+ if ($Meta{copyright});
+}
+
+sub SetXHTMLFront
+{
+ $frontmatter = "$title
\n"
+ if ($title && ($title ne $firstheading));
+ if ($authorcount > 0)
+ {
+ for my $index (1..$authorcount)
+ {
+ $frontmatter .= "$Meta{author}[$index-1]
\n";
+ $frontmatter .= "$Meta{organization}[$index-1]
\n"
+ if ($Meta{organization}[$index-1]);
+ $frontmatter .= "$Meta{address}[$index-1]
\n"
+ if ($Meta{address}[$index-1]);
+ }
+ }
+ $frontmatter .= "
$Version[$language] $Meta{version}
\n"
+ if ($Meta{version});
+ $frontmatter .= "
$Meta{date}
\n" if ($Meta{date});
+ $frontmatter = "$frontmatter
\n"
+ if ($frontmatter);
+ if ($Meta{abstract})
+ {
+ $Meta{abstract} =~ s/$FS$FS/<\/p>\n/g;
+ $frontmatter .="
\n$Meta{abstract}
\n
\n";
+ }
+ $frontmatter .= "
$Meta{copyright}
\n"
+ if ($Meta{copyright});
+}
+
+sub SetDBFront
+{
+ $frontmatter = "$title\n";
+ if ($authorcount > 0)
+ {
+ for my $index (1..$authorcount)
+ {
+ my $affil;
+ $frontmatter .= "\n";
+ $Meta{author}[$index-1] =~ /^(.*)\s(\S+)\s*$/;
+ $frontmatter .= "$1\n";
+ $frontmatter .= "$2\n";
+ $affil .= "$Meta{organization}[$index-1]" .
+ "\n" if ($Meta{organization}[$index-1]);
+ $affil .= "$Meta{address}[$index-1]\n"
+ if ($Meta{address}[$index-1]);
+ $frontmatter .= "\n$affil\n\n"
+ if ($affil);
+ $frontmatter .= "\n";
+ }
+ }
+ if ($Meta{version})
+ {
+ $frontmatter .= "\n$Meta{version}"
+ . "";
+ $frontmatter .= "$Meta{date}" if ($Meta{date});
+ $frontmatter .= "\n\n";
+ }
+ else
+ {
+ $frontmatter .= "$Meta{date}\n" if ($Meta{date});
+ }
+ if ($Meta{abstract})
+ {
+ $Meta{abstract} =~ s/$FS$FS/<\/para>\n/g;
+ $frontmatter .= "\n$Meta{abstract}\n\n";
+ }
+ $frontmatter .= "\n$Meta{copyright}\n"
+ . "\n" if ($Meta{copyright});
+}
+
+sub SetLatexFront
+{
+ my $copyright = 0;
+ if ($title && ($title ne $firstheading))
+ {
+ $frontmatter = "\\title\{$title";
+ if ($Meta{copyright})
+ {
+ $frontmatter .= "\n\\footnote\{$Meta{copyright}\}";
+ $copyright = 1;
+ }
+ $frontmatter .= "\}\n";
+ }
+ if ($authorcount > 0)
+ {
+ $frontmatter .= '\author{';
+ for my $index (1..$authorcount)
+ {
+ $frontmatter .= "\\\\\n" if ($index > 1);
+ $frontmatter .= "$Meta{author}[$index-1]";
+ $frontmatter .= "\\\\\n\\emph\{$Meta{organization}[$index-1]\}"
+ if ($Meta{organization}[$index-1]);
+ $frontmatter .= "\\\\\n$Meta{address}[$index-1]"
+ if ($Meta{address}[$index-1]);
+ }
+ $frontmatter .= "\}\n";
+ }
+ if ($Meta{date})
+ {
+ $frontmatter .= "\\date\{";
+ $frontmatter .= "$Version[$language] $Meta{version}, "
+ if ($Meta{version});
+ $frontmatter .= "$Meta{date}" ;
+ $frontmatter .= "\}\n";
+ }
+ $frontmatter .= "\\maketitle\n" if ($frontmatter);
+ if ($Meta{abstract})
+ {
+ $Meta{abstract} =~ s/$FS$FS/\n\n/g;
+ $frontmatter .= "\\begin\{abstract\}\n$Meta{abstract}\n";
+ $frontmatter .= "\\end\{abstract\}\n";
+ }
+ $frontmatter .= "\n$Meta{copyright}\n\n"
+ if ($Meta{copyright} && $copyright == 0);
+
+}
+
+sub ReadTemplate
+{
+ my $file = pop;
+ open (IN,"<$file") or die "$0: Cannot read template file $file\n\n" ;
+ undef $/;
+ $Template = ;
+ close IN;
+}
+
+sub GetOpts
+{
+ my $file;
+ while ($_ = $ARGV[0], /^-/)
+ {
+ shift(@ARGV);
+ if (/^-f$/) { $Format = shift(@ARGV); next }
+ if (/^-f(.*)$/) { $Format = $1; next }
+ if (/^--format\=(.*)$/) { $Format = $1; next }
+ if (/^-T$/) { $title = shift(@ARGV); next }
+ if (/^-T(.*)$/) { $title = $1; next }
+ if (/^--title\=(.*)$/) { $title = $1; next }
+ if (/^-t$/) { &ReadTemplate(shift(@ARGV)); next }
+ if (/^-t(.*)$/) { &ReadTemplate($1); next }
+ if (/^--template\=(.*)$/) { &ReadTemplate($1); next }
+ if (/^(-c|--copyright)/) { &Copying; next }
+ if (/^(-h|--help)/) { &Usage }
+ }
+ unshift(@ARGV, '-') unless @ARGV;
+ &Usage if (@ARGV > 1);
+ $file = shift(@ARGV);
+ return $file;
+}
diff --git a/helpers/make-ubuntu-release-upgrader b/helpers/make-ubuntu-release-upgrader
index 281c923..aa2075f 100644
--- a/helpers/make-ubuntu-release-upgrader
+++ b/helpers/make-ubuntu-release-upgrader
@@ -192,9 +192,9 @@ EOF
rm DistUpgrade/EOLReleaseAnnouncement.html DistUpgrade/ReleaseAnnouncement.html
-parsewiki DistUpgrade/EOLReleaseAnnouncement > DistUpgrade/EOLReleaseAnnouncement.html
-parsewiki DistUpgrade/ReleaseAnnouncement > DistUpgrade/ReleaseAnnouncement.html
-parsewiki DistUpgrade/DevelReleaseAnnouncement > DistUpgrade/DevelReleaseAnnouncement.html
+perl $DATA/parsewiki DistUpgrade/EOLReleaseAnnouncement > DistUpgrade/EOLReleaseAnnouncement.html
+perl $DATA/parsewiki DistUpgrade/ReleaseAnnouncement > DistUpgrade/ReleaseAnnouncement.html
+perl $DATA/parsewiki DistUpgrade/DevelReleaseAnnouncement > DistUpgrade/DevelReleaseAnnouncement.html
rm data/removal_blacklist.cfg
cat < data/removal_blacklist.cfg