summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/doc/latex/svninfo/svninfo.perl
blob: 36cacafe7b955d8185d62008829d7c7bff1e63a2 (plain)
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
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264

###############################################################################
# SVNINFO.PERL
# Copyright 1995 Dr. Juergen Vollmer <Juergen.Vollmer@acm.org>
# Copyright 2003-2005 Achim D. Brucker <brucker@freiburg.linux.de>
#
# Extension to LaTeX2HTML to translate LaTeX commands of the
#               svninfo
# package to equivalent HTML commands.
#
# This is file `svninfo.perl',
# generated with the docstrip utility.
#
# The original source files were:
#
# svninfo.dtx  (with options: `perl')
#
# IMPORTANT NOTICE:
#
# For the copyright see the source file.
#
# Any modified versions of this file must be renamed
# with new filenames distinct from svninfo.perl.
#
# For distribution of the original source see the terms
# for copying and modification in the file svninfo.dtx.
#
# This generated file may be distributed as long as the
# original source files, as listed above, are part of the
# same distribution. (The sources need not necessarily be
# in the same archive or directory.)
#
# $Id: svninfo.dtx 1168 2005-04-08 06:18:47Z brucker $
#
###############################################################################

package svninfo;

($Dummy1,$PackageVersionDate,$PackageVersionTime,$Dummy2) =
        split (/ /,'$Date: 2005-04-08 08:18:47 +0200 (Fr, 08 Apr 2005) $');

print "\n\t svninfo style interface for LaTeX2HTML, $PackageVersionDate\n";

# set defaults options
$OptionFancy = 1;
$OptionToday = 1;
$OptionLong  = 1;

# set default values
$Date     = `date '+%Y/%m/%d'`;
$Time     = `date '+%H:%M:%S'`;
$File     = "--sourcefile--";
$Revision = "--revision--";
$Owner    = "--owner--";
$Year     = `date '+%Y'`;
$Month    = `date '+%m'`;
$Day      = `date '+%d'`;
$LongDate = $Date;

sub SetAddress
{
    $main::address_data[1] = "Revision: $svninfo::Revision, $svninfo::LongDate";
    # Supply your own string if you don't like the default <Name> <Date>
    $main::ADDRESS = "<I>$main::address_data[0] <BR>\n$main::address_data[1]</I>";
}
if ($SetAddressProc == "") {
  $SetAddressProc = \&svninfo::SetAddress;
}
sub make_cmds
{
  my $cmd;
  foreach $cmd (File,Revision,Date,Time,Owner,Year,Month,Day,LongDate) {
        eval "sub main::do_cmd_svnInfo$cmd { "
            . 'my $val = $svninfo::' . "$cmd; "
#           . 'printf STDERR "\ndo_cmd_svnInfo%s=%s\n", ' . $cmd .', $val;'
            . "join('',\$val,\$_[0]);"
            . "}";
  }
}

@GermanMonthName  = ('','Januar','Februar','M&auml;rz','April','Mai','Juni','Juli',
                    'August','September','Oktober','November','Dezember');
@EnglishMonthName = ('','January','February','March','April','May','June','July',
                    'August','September','October','November','December');
@FrenchMonthName  = ('','Janvier','F&eacute;vrier','Mars','Avril','Mai','Juin',
                     'Juillet','Ao&ucirc;t','Septembre','Octobre','Novembre',
                     'D&eacute;cembre');

###############################################################################

package main;

# handling package options
sub do_svninfo_fancyhdr { $svninfo::OptionFancy = 1; }
sub do_svninfo_fancy    { $svninfo::OptionFancy = 1; }
sub do_svninfo_nofancy  { $svninfo::OptionFancy = 0; }
sub do_svninfo_today    { $svninfo::OptionToday = 1; }
sub do_svninfo_notoday  { $svninfo::OptionToday = 0; }
sub do_svninfo_short    { $svninfo::OptionLong  = 0; }
sub do_svninfo_long     { $svninfo::OptionLong  = 1; }

# handling of LaTeX commands
sub do_cmd_svnInfo
{

    local ($_) = @_;

    # printf STDERR "\ndo_cmd_svnInfo\n";

    # see latex2html, procedure: substitute_meta_cmds, process_body_newcommand
    # the format of the variable $new_command{cmd} is:
    #   $new_command{$cmd} = join(':!:',$argn,$body,$opt);
    # note: opt = "}" means:  Flag for no optional arg
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoFILE};
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoREVISION};
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoYEAR};
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoMONTH};
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoDAY};
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoTIME};
    # printf STDERR "xxxxxxxxxxx `%s'\n", $new_command{svnInfoOWNER};

    # the following assumes: LaTeX2HTML Version 99.1 release (March 30, 1999)
    # may be later
    my ($argn, $opt);
    if (exists $new_command{svnInfoFILE}) {
        ($argn, $svninfo::File, $opt) = split(/:!:/, $new_command{svnInfoFILE});
    } else {
         $svninfo::File = $File
    }
    if (exists $new_command{svnInfoREVISION}) {
        ($argn, $svninfo::Revision, $opt) = split(/:!:/, $new_command{svnInfoREVISION});
    } else {
         $svninfo::Revision = $Revision
    }
    if (exists $new_command{svnInfoYEAR}) {
        ($argn, $svninfo::Year, $opt) = split(/:!:/, $new_command{svnInfoYEAR});
    } else {
         $svninfo::Year = $Year
    }
    if (exists $new_command{svnInfoMONTH}) {
        ($argn, $svninfo::Month, $opt) = split(/:!:/, $new_command{svnInfoMONTH});
    } else {
         $svninfo::Month = $Month
    }
    if (exists $new_command{svnInfoDAY}) {
        ($argn, $svninfo::Day, $opt) = split(/:!:/, $new_command{svnInfoDAY});
    } else {
         $svninfo::Day = $Day
    }
    if (exists $new_command{svnInfoTIME}) {
        ($argn, $svninfo::Time, $opt) = split(/:!:/, $new_command{svnInfoTIME});
    } else {
         $svninfo::Time = $Time
    }
    if (exists $new_command{svnInfoOWNER}) {
        ($argn, $svninfo::Owner, $opt) = split(/:!:/, $new_command{svnInfoOWNER});
    } else {
         $svninfo::Owner = $Owner
    }

    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::File;
    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::Revision;
    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::Year;
    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::Month;
    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::Day;
    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::Time;
    # printf STDERR "yyyyyyyyyyy `%s'\n",  $svninfo::Owner;

    # the following code is for oldfashioned latex2hmtl, not anymore supported
    # format of $_:
    #                  vvvvvv that's text following the SVN-Id-string
    # <#nr#>.....<#nr>......
    #       ^ ^ ^  that's the SVN-Id-string
#    my ($Nr,$IdString,$Rest) = /(<#\d+#>)(.*)\1(.*)/s ;

    # The Id-String  may contain various tags, remove them
#    $IdString =~ s/<[^>]*>//g;

     # The Id-String  may contain various tags, remove them
#    $IdString =~ s/<[^>]*>//g;

    # split the Id-string
#    my ($id,$file,$revision,$date,$time,$owner) = split(/\s/,$IdString);

    # remove trailing ,v
#    $file =~ s/,v$//;

    # split date
#    ($svninfo::Year,$svninfo::Month,$svninfo::Day) = split (/\//,$date);

#    $svninfo::Revision = $revision;
#    $svninfo::File     = $file;
#    $svninfo::Date     = $date;
#    $svninfo::Time     = $time;
#    $svninfo::Owner    = $owner;

    if ($default_language eq 'german' || $default_language eq 'austrian') {
        $svninfo::LongDate = $svninfo::Day . '.&nbsp;' .
                 $svninfo::GermanMonthName[$svninfo::Month] . '&nbsp;' .
                 $svninfo::Year;
        $svnInfo::Date = $svninfo::Day . '.&nbsp;' . $svninfo::Month . '.&nbsp;' . $svninfo::Year;
    } elsif ($default_language eq 'french') {
        $svninfo::LongDate = $svninfo::Day . '.&nbsp;' .
                 $svninfo::FrenchMonthName[$svninfo::Month] . '&nbsp;' .
                 $svninfo::Year;
        $svnInfo::Date = $svninfo::Day . '.&nbsp;' .$svninfo::Month . '.&nbsp;' . $svninfo::Year;
    } else { # english is the default
        $svninfo::LongDate = $svninfo::EnglishMonthName[$svninfo::Month] . '&nbsp;' .
                 $svninfo::Day . ',&nbsp;' .
                 $svninfo::Year;
        $svnInfo::Date = $svninfo::Year . '/' .$svninfo::Month . '/' . $svninfo::Day;
    }

    if ($svninfo::OptionFancy == 1) {
       &$svninfo::SetAddressProc;
    }
    svninfo::make_cmds();

    # printf STDERR "xxx $HTML_VERSION, $HTML_OPTIONS\n";
    # remove stuff generated for the $Id: svninfo.dtx 1168 2005-04-08 06:18:47Z brucker $-string
    # we assume that noting follows the "\svnInfo $Id....$"
    if ($HTML_VERSION >= 3.2) {
        /^<tex2html_verbatim_mark>[^\n]*/;
        return $';
    } elsif ($HTML_VERSION == 3.1 || $HTML_VERSION == 2.1) {
        /^<tex2html_image_mark>[^\n]*/;
        return $';
    } else {
        if ($HTML_OPTIONS =~ /math/) {
            /^<tex2html_verbatim_mark>[^\n]*/;
            return $';
        } else {
            /^<tex2html_image_mark>[^\n]*/;
            return $';
        }
    }
}

# Replace do_cmd_today (\today) using the SVN date.
sub do_cmd_today {
    local($today);
    if ($svninfo::OptionToday == 1) {
        $today = $svninfo::LongDate;
    } else {
        if ($default_language eq 'german' || $default_language eq 'austrian') {
            $today = (`date "+%m:%d, 20%y"`);
            $today =~ s/(\d{1,2}):0?(\d{1,2}),/$2. $svninfo::GermanMonthName[$1]/o;
            $today =~ s/20([7|8|9]\d{1})/19$1/o;
        } elsif ($default_language eq 'french') {
            $today = (`date "+%m:%d, 20%y"`);
            $today =~ s/(\d{1,2}):0?(\d{1,2}),/$2 $svninfo::FrenchMonthName[$1]/o;
            $today =~ s/20([7|8|9]\d{1})/19$1/o;
        } else { # english is the default
            $today = (`date "+%m:%d, 20%y"`);
            $today =~ s/(\d{1,2}):0?/$svninfo::EnglishMonthName[$1] /o;
            $today =~ s/20([7|8|9]\d{1})/19$1/o;
        }
    }
    join('',$today,$_[0]);
}

1;

###############################################################################