aboutsummaryrefslogtreecommitdiffstats
path: root/Rpmdrake/formatting.pm
blob: 911819f9ff9f28f23d213511c66fad1923bf5fa4 (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
package Rpmdrake::formatting;
#*****************************************************************************
#
#  Copyright (c) 2002 Guillaume Cottenceau
#  Copyright (c) 2002-2006 Thierry Vignaud <tvignaud@mandriva.com>
#  Copyright (c) 2003, 2004, 2005 MandrakeSoft SA
#  Copyright (c) 2005, 2006 Mandriva SA
#
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License version 2, as
#  published by the Free Software Foundation.
#
#  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.
#
#*****************************************************************************
#
# $Id$

use strict;
use utf8;
use POSIX qw(strftime);
use rpmdrake;
use lib qw(/usr/lib/libDrakX);
use common;
use ugtk2 qw(escape_text_for_TextView_markup_format);

use Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(
                    format_field
                    format_header
                    format_name_n_summary
                    format_size
                    format_update_field
                    localtime2changelog
                    my_fullname
                    pkg2medium
                    rpm_description
                    split_fullname
                    urpm_name);


sub rpm_description {
    my ($description) = @_;
    utf8::decode($description);
    my ($t, $tmp);
    foreach (split "\n", $description) {
	s/^\s*//;
        if (/^$/ || /^\s*(-|\*|\+|o)\s/) {
            $t || $tmp and $t .= "$tmp\n";
            $tmp = $_;
        } else {
            $tmp = ($tmp ? "$tmp " : ($t && "\n") . $tmp) . $_;
        }
    }
    "$t$tmp\n";
}


sub split_fullname { $_[0] =~ /^(.*)-([^-]+)-([^-]+)\.([^.-]+)$/ }
sub my_fullname {
    return '?-?-?' unless ref $_[0];
    my ($name, $version, $release) = $_[0]->fullname;
    "$name-$version-$release";
}


sub urpm_name {
    return '?-?-?.?' unless ref $_[0];
    my ($name, $version, $release, $arch) = $_[0]->fullname;
    "$name-$version-$release.$arch";
}


sub pkg2medium {
    my ($p, $urpm) = @_;
    return { name => N("None") } if !$p->id; # if installed
    URPM::pkg2media($urpm->{media}, $p) || undef;
}

#- strftime returns a string in the locale charset encoding;
#- but gtk2 requires UTF-8, so we use to_utf8() to ensure the
#- output of localtime2changelog() is always in UTF-8
#- as to_utf8() uses LC_CTYPE for locale encoding and strftime() uses LC_TIME,
#- it doesn't work if those two variables have values with different
#- encodings; but if a user has a so broken setup we can't do much anyway
sub localtime2changelog { to_utf8(POSIX::strftime("%c", localtime($_[0]))) }

sub format_update_field {
    my ($name) = @_;
    '<i>' . eval { escape_text_for_TextView_markup_format($name) } . '</i>';
}

sub format_name_n_summary {
    my ($name, $summary) = @_;
    join("\n", '<b>' . $name . '</b>', escape_text_for_TextView_markup_format($summary));
}

sub format_header {
    my ($str) = @_;
    '<big>' . escape_text_for_TextView_markup_format($str) . '</big>';
}

sub format_field {
    my ($str) = @_;
    '<b>' . escape_text_for_TextView_markup_format($str) . '</b>';
}

sub format_size {
    my ($size) = @_;
    $size >= 0 ? 
      N("%s of additional disk space will be used.", formatXiB($size)) :
        N("%s of disk space will be freed.", formatXiB(-$size));
 }

1;