File: WmlRc.pm

package info (click to toggle)
wml 2.32.0~ds1-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, trixie
  • size: 1,812 kB
  • sloc: perl: 6,963; ansic: 747; yacc: 154; makefile: 107; sh: 25
file content (88 lines) | stat: -rw-r--r-- 1,781 bytes parent folder | download | duplicates (3)
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
##  WML -- Website META Language
##
##  Copyright (c) 1996-2001 Ralf S. Engelschall.
##  Copyright (c) 1999-2001 Denis Barbier.
package TheWML::Frontends::Wml::WmlRc;

use 5.014;

use strict;
use warnings;

use Class::XSAccessor (
    constructor => 'new',
    accessors   => +{
        map { $_ => $_ }
            qw(
            _main
            )
    }
);

use Cwd ();
use File::Basename qw/ basename dirname /;
use TheWML::Frontends::Wml::WmlRcDir ();
use TheWML::Frontends::Wml::Util qw/ _my_cwd /;

sub _process_wmlrc_dir
{
    my ( $self, $dir ) = @_;

    return TheWML::Frontends::Wml::WmlRcDir->new(
        _main => $self->_main,
        dir   => $dir
    )->_process_wmlrc_dir;
}

sub _process_wmlrc
{
    my ($self) = @_;

    if ( $self->_main->_opt_r )
    {
        return;
    }
    my $savedir = '';

    #   First save current directory and go to input file directory
    if ( not $self->_main->_opt_c and $self->_main->_src =~ m|/| )
    {
        $self->_main->_src( dirname( $self->_main->_src ) );
        if ( -d $self->_main->_src )
        {
            $savedir = Cwd::cwd;
            chdir( $self->_main->_src );
        }
    }
    $self->_main->_src('') if not $savedir;

    #   2. add all parent dirs .wmlrc files for options
    my $cwd = _my_cwd;
    my @DIR;
    while ($cwd)
    {
        push( @DIR, $cwd );
        $cwd =~ s#/[^/]+\z##;
    }

    #   Restore directory
    chdir($savedir) if $savedir;

    #   3. add ~/.wmlrc file for options
    my @pwinfo = getpwuid($<);
    my $home   = $pwinfo[7];
    $home =~ s#/\z##;
    if ( -f "$home/.wmlrc" )
    {
        push( @DIR, $home );
    }

    #   now parse these RC files
    foreach my $dir ( reverse(@DIR) )
    {
        $self->_process_wmlrc_dir($dir);
    }
    return;
}

1;