line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package File::LsColor; |
2
|
2
|
|
|
2
|
|
135131
|
use strict; |
|
2
|
|
|
|
|
13
|
|
|
2
|
|
|
|
|
67
|
|
3
|
|
|
|
|
|
|
#use warnings; |
4
|
|
|
|
|
|
|
|
5
|
|
|
|
|
|
|
BEGIN { |
6
|
2
|
|
|
2
|
|
10
|
use Exporter; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
73
|
|
7
|
2
|
|
|
2
|
|
11
|
use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS); |
|
2
|
|
|
|
|
3
|
|
|
2
|
|
|
|
|
292
|
|
8
|
|
|
|
|
|
|
|
9
|
2
|
|
|
2
|
|
8
|
$VERSION = '0.530'; |
10
|
2
|
|
|
|
|
33
|
@ISA = qw(Exporter); |
11
|
|
|
|
|
|
|
|
12
|
2
|
|
|
|
|
9
|
@EXPORT_OK = qw( |
13
|
|
|
|
|
|
|
ls_color |
14
|
|
|
|
|
|
|
ls_color_custom |
15
|
|
|
|
|
|
|
ls_color_default |
16
|
|
|
|
|
|
|
ls_color_internal |
17
|
|
|
|
|
|
|
get_ls_colors |
18
|
|
|
|
|
|
|
can_ls_color |
19
|
|
|
|
|
|
|
ls_color_lookup |
20
|
|
|
|
|
|
|
parse_ls_colors |
21
|
|
|
|
|
|
|
slack_code_to_ls_code |
22
|
|
|
|
|
|
|
); |
23
|
|
|
|
|
|
|
|
24
|
2
|
|
|
|
|
114
|
%EXPORT_TAGS = ( |
25
|
|
|
|
|
|
|
all => [ |
26
|
|
|
|
|
|
|
qw( |
27
|
|
|
|
|
|
|
ls_color ls_color_custom ls_color_default ls_color_internal |
28
|
|
|
|
|
|
|
get_ls_colors can_ls_color ls_color_lookup parse_ls_colors |
29
|
|
|
|
|
|
|
slack_code_to_ls_code |
30
|
|
|
|
|
|
|
) |
31
|
|
|
|
|
|
|
], |
32
|
|
|
|
|
|
|
); |
33
|
|
|
|
|
|
|
} |
34
|
|
|
|
|
|
|
|
35
|
|
|
|
|
|
|
# Skip stat:ing files for attributes like +x. This can be desired if the |
36
|
|
|
|
|
|
|
# filenames aren't real files, or for performance reasons. |
37
|
|
|
|
|
|
|
our $NO_STAT = 0; |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
# If true, ignore case on file extensions; mp4/MP4 |
40
|
|
|
|
|
|
|
our $IGNORE_CASE = 0; |
41
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
# alias for compatibility reasons with File::LsColor prior to 0.300 |
43
|
|
|
|
|
|
|
{ |
44
|
2
|
|
|
2
|
|
12
|
no warnings 'once'; |
|
2
|
|
|
|
|
4
|
|
|
2
|
|
|
|
|
126
|
|
45
|
|
|
|
|
|
|
*ls_color_lookup = *can_ls_color; |
46
|
|
|
|
|
|
|
} |
47
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
#use Carp qw(croak); |
49
|
2
|
|
|
2
|
|
1137
|
use Term::ExtendedColor qw(fg); |
|
2
|
|
|
|
|
5121
|
|
|
2
|
|
|
|
|
2118
|
|
50
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
|
52
|
|
|
|
|
|
|
#
|
53
|
|
|
|
|
|
|
# yes, this is pretty :) |
54
|
|
|
|
|
|
|
# colors from https://github.com/trapd00r/LS_COLORS |
55
|
|
|
|
|
|
|
my $internal_ls_color=' |
56
|
|
|
|
|
|
|
bd=38;5;68:ca=38;5;17:cd=38;5;113;1:di=38;5;30:do=38;5;127:ex=38;5;166;1: |
57
|
|
|
|
|
|
|
pi=38;5;126:fi=38;5;253:ln=target:mh=38;5;222;1:or=48;5;196;38;5;232;1: |
58
|
|
|
|
|
|
|
ow=38;5;220;1:sg=48;5;3;38;5;0:su=38;5;220;1;3;100;1:so=38;5;197: |
59
|
|
|
|
|
|
|
st=38;5;232;48;5;30:tw=48;5;235;38;5;139;3:*LS_COLORS=48;5;89;38;5;197;1;3;4;7: |
60
|
|
|
|
|
|
|
*.msi=38;5;039:*.xys=38;5;204:*README=38;5;220;1:*LICENSE=38;5;220;1: |
61
|
|
|
|
|
|
|
*COPYING=38;5;220;1:*INSTALL=38;5;220;1:*COPYRIGHT=38;5;220;1: |
62
|
|
|
|
|
|
|
*AUTHORS=38;5;220;1:*HISTORY=38;5;220;1:*CONTRIBUTORS=38;5;220;1: |
63
|
|
|
|
|
|
|
*PATENTS=38;5;220;1:*VERSION=38;5;220;1:*NOTICE=38;5;220;1:*CHANGES=38;5;220;1: |
64
|
|
|
|
|
|
|
*.log=38;5;190:*Makefile=38;5;155:*MANIFEST=38;5;243:*pm_to_blib=38;5;240: |
65
|
|
|
|
|
|
|
*.txt=38;5;253:*.etx=38;5;184:*.info=38;5;184:*.markdown=38;5;184:*.md=38;5;184: |
66
|
|
|
|
|
|
|
*.mkd=38;5;184:*.nfo=38;5;184:*.pod=38;5;184:*.tex=38;5;184:*.textile=38;5;184: |
67
|
|
|
|
|
|
|
*.json=38;5;178:*.msg=38;5;178:*.pgn=38;5;178:*.rss=38;5;178:*.xml=38;5;178: |
68
|
|
|
|
|
|
|
*.yml=38;5;178:*.RData=38;5;178:*.rdata=38;5;178:*.csv=38;5;78:*.cbr=38;5;141: |
69
|
|
|
|
|
|
|
*.cbz=38;5;141:*.chm=38;5;141:*.djvu=38;5;141:*.pdf=38;5;141:*.PDF=38;5;141: |
70
|
|
|
|
|
|
|
*.docm=38;5;111;4:*.doc=38;5;111:*.docx=38;5;111:*.eps=38;5;111:*.ps=38;5;111: |
71
|
|
|
|
|
|
|
*.odb=38;5;111:*.odt=38;5;111:*.odp=38;5;166:*.pps=38;5;166:*.ppt=38;5;166: |
72
|
|
|
|
|
|
|
*.ods=38;5;112:*.xla=38;5;76:*.xls=38;5;112:*.xlsx=38;5;112:*.xlsxm=38;5;112;4: |
73
|
|
|
|
|
|
|
*.xltm=38;5;73;4:*.xltx=38;5;73:*cfg=38;5;204:*conf=38;5;204:*rc=38;5;204: |
74
|
|
|
|
|
|
|
*.ini=38;5;204:*.gws=38;5;204:*.viminfo=38;5;204:*.pcf=38;5;204:*.psf=38;5;204: |
75
|
|
|
|
|
|
|
*.reg=38;5;203:*.git=38;5;197:*.gitignore=38;5;240:*.gitattributes=38;5;240: |
76
|
|
|
|
|
|
|
*.gitmodules=38;5;240:*.awk=38;5;172:*.bash=38;5;172:*.bat=38;5;172: |
77
|
|
|
|
|
|
|
*.BAT=38;5;172:*.sed=38;5;172:*.sh=38;5;138:*.zsh=38;5;137:*.vim=38;5;254;1: |
78
|
|
|
|
|
|
|
*.ahk=38;5;41:*.py=38;5;41:*.pl=38;5;208:*.PL=38;5;160:*.t=38;5;114: |
79
|
|
|
|
|
|
|
*.msql=38;5;222:*.mysql=38;5;222:*.pgsql=38;5;222:*.sql=38;5;222: |
80
|
|
|
|
|
|
|
*.tcl=38;5;64;1:*.r=38;5;49:*.R=38;5;49:*.gs=38;5;81:*.asm=38;5;81: |
81
|
|
|
|
|
|
|
*.cl=38;5;81:*.lisp=38;5;81:*.lua=38;5;81:*.moon=38;5;81:*.c=38;5;81: |
82
|
|
|
|
|
|
|
*.C=38;5;81:*.h=38;5;110:*.H=38;5;110:*.tcc=38;5;110:*.c++=38;5;81: |
83
|
|
|
|
|
|
|
*.h++=38;5;110:*.hpp=38;5;110:*.hxx=38;5;110:*.ii=38;5;110:*.M=38;5;110: |
84
|
|
|
|
|
|
|
*.m=38;5;110:*.cc=38;5;81:*.cs=38;5;81:*.cp=38;5;81:*.cpp=38;5;81:*.cxx=38;5;81: |
85
|
|
|
|
|
|
|
*.cr=38;5;81:*.go=38;5;81:*.f=38;5;81:*.for=38;5;81:*.ftn=38;5;81:*.s=38;5;110: |
86
|
|
|
|
|
|
|
*.S=38;5;110:*.rs=38;5;81:*.sx=38;5;81:*.hi=38;5;110:*.hs=38;5;81:*.lhs=38;5;81: |
87
|
|
|
|
|
|
|
*.pyc=38;5;240:*.css=38;5;125;1:*.less=38;5;125;1:*.sass=38;5;125;1: |
88
|
|
|
|
|
|
|
*.scss=38;5;125;1:*.htm=38;5;125;1:*.html=38;5;125;1:*.jhtm=38;5;125;1: |
89
|
|
|
|
|
|
|
*.mht=38;5;125;1:*.eml=38;5;125;1:*.mustache=38;5;125;1:*.coffee=38;5;074;1: |
90
|
|
|
|
|
|
|
*.java=38;5;074;1:*.js=38;5;074;1:*.jsm=38;5;074;1:*.jsm=38;5;074;1: |
91
|
|
|
|
|
|
|
*.jsp=38;5;074;1:*.php=38;5;81:*.ctp=38;5;81:*.twig=38;5;81:*.vb=38;5;81: |
92
|
|
|
|
|
|
|
*.vba=38;5;81:*.vbs=38;5;81:*.am=38;5;242:*.in=38;5;242:*.hin=38;5;242: |
93
|
|
|
|
|
|
|
*.scan=38;5;242:*.m4=38;5;242:*.old=38;5;242:*.out=38;5;242:*.SKIP=38;5;244: |
94
|
|
|
|
|
|
|
*.diff=48;5;197;38;5;232:*.patch=48;5;197;38;5;232;1:*.bmp=38;5;129: |
95
|
|
|
|
|
|
|
*.tiff=38;5;97:*.TIFF=38;5;97:*.cdr=38;5;97:*.gif=38;5;97:*.ico=38;5;132: |
96
|
|
|
|
|
|
|
*.jpeg=38;5;125:*.JPG=38;5;125:*.jpg=38;5;125:*.nth=38;5;97:*.png=38;5;197: |
97
|
|
|
|
|
|
|
*.svg=38;5;97:*.xpm=38;5;97:*.avi=38;5;114:*.divx=38;5;114:*.IFO=38;5;114: |
98
|
|
|
|
|
|
|
*.m2v=38;5;114:*.m4v=38;5;114:*.mkv=38;5;114:*.MOV=38;5;114:*.mov=38;5;114: |
99
|
|
|
|
|
|
|
*.mp4=38;5;114:*.mpeg=38;5;114:*.mpg=38;5;114:*.ogm=38;5;114:*.rmvb=38;5;114: |
100
|
|
|
|
|
|
|
*.sample=38;5;114:*.wmv=38;5;114:*.3g2=38;5;115:*.3gp=38;5;115:*.gp3=38;5;115: |
101
|
|
|
|
|
|
|
*.webm=38;5;115:*.gp4=38;5;115:*.asf=38;5;115:*.flv=38;5;115:*.ts=38;5;115: |
102
|
|
|
|
|
|
|
*.ogv=38;5;115:*.f4v=38;5;115:*.VOB=38;5;115;1:*.vob=38;5;115;1: |
103
|
|
|
|
|
|
|
*.3ga=38;5;137;1:*.S3M=38;5;137;1:*.aac=38;5;137;1:*.dat=38;5;137;1: |
104
|
|
|
|
|
|
|
*.dts=38;5;137;1:*.fcm=38;5;137;1:*.m4a=38;5;137;1:*.mid=38;5;137;1: |
105
|
|
|
|
|
|
|
*.midi=38;5;137;1:*.mod=38;5;137;1:*.mp3=38;5;137;1:*.oga=38;5;137;1: |
106
|
|
|
|
|
|
|
*.ogg=38;5;137;1:*.s3m=38;5;137;1:*.sid=38;5;137;1:*.ape=38;5;136;1: |
107
|
|
|
|
|
|
|
*.flac=38;5;136;1:*.alac=38;5;136;1:*.wav=38;5;136;1:*.wv=38;5;136;1: |
108
|
|
|
|
|
|
|
*.wvc=38;5;136;1:*.afm=38;5;66:*.pfb=38;5;66:*.pfm=38;5;66:*.ttf=38;5;66: |
109
|
|
|
|
|
|
|
*.otf=38;5;66:*.PFA=38;5;66:*.pfa=38;5;66:*.7z=38;5;40:*.a=38;5;40: |
110
|
|
|
|
|
|
|
*.arj=38;5;40:*.bz2=38;5;40:*.gz=38;5;40:*.rar=38;5;40:*.tar=38;5;40: |
111
|
|
|
|
|
|
|
*.tgz=38;5;40:*.xz=38;5;40:*.zip=38;5;40:*.r00=38;5;239:*.r01=38;5;239: |
112
|
|
|
|
|
|
|
*.r02=38;5;239:*.r03=38;5;239:*.r04=38;5;239:*.r05=38;5;239:*.r06=38;5;239: |
113
|
|
|
|
|
|
|
*.r07=38;5;239:*.r08=38;5;239:*.r09=38;5;239:*.r10=38;5;239:*.r100=38;5;239: |
114
|
|
|
|
|
|
|
*.r101=38;5;239:*.r102=38;5;239:*.r103=38;5;239:*.r104=38;5;239: |
115
|
|
|
|
|
|
|
*.r105=38;5;239:*.r106=38;5;239:*.r107=38;5;239:*.r108=38;5;239: |
116
|
|
|
|
|
|
|
*.r109=38;5;239:*.r11=38;5;239:*.r110=38;5;239:*.r111=38;5;239:*.r112=38;5;239: |
117
|
|
|
|
|
|
|
*.r113=38;5;239:*.r114=38;5;239:*.r115=38;5;239:*.r116=38;5;239:*.r12=38;5;239: |
118
|
|
|
|
|
|
|
*.r13=38;5;239:*.r14=38;5;239:*.r15=38;5;239:*.r16=38;5;239:*.r17=38;5;239: |
119
|
|
|
|
|
|
|
*.r18=38;5;239:*.r19=38;5;239:*.r20=38;5;239:*.r21=38;5;239:*.r22=38;5;239: |
120
|
|
|
|
|
|
|
*.r25=38;5;239:*.r26=38;5;239:*.r27=38;5;239:*.r28=38;5;239:*.r29=38;5;239: |
121
|
|
|
|
|
|
|
*.r30=38;5;239:*.r31=38;5;239:*.r32=38;5;239:*.r33=38;5;239:*.r34=38;5;239: |
122
|
|
|
|
|
|
|
*.r35=38;5;239:*.r36=38;5;239:*.r37=38;5;239:*.r38=38;5;239:*.r39=38;5;239: |
123
|
|
|
|
|
|
|
*.r40=38;5;239:*.r41=38;5;239:*.r42=38;5;239:*.r43=38;5;239:*.r44=38;5;239: |
124
|
|
|
|
|
|
|
*.r45=38;5;239:*.r46=38;5;239:*.r47=38;5;239:*.r48=38;5;239:*.r49=38;5;239: |
125
|
|
|
|
|
|
|
*.r50=38;5;239:*.r51=38;5;239:*.r52=38;5;239:*.r53=38;5;239:*.r54=38;5;239: |
126
|
|
|
|
|
|
|
*.r55=38;5;239:*.r56=38;5;239:*.r57=38;5;239:*.r58=38;5;239:*.r59=38;5;239: |
127
|
|
|
|
|
|
|
*.r60=38;5;239:*.r61=38;5;239:*.r62=38;5;239:*.r63=38;5;239:*.r64=38;5;239: |
128
|
|
|
|
|
|
|
*.r65=38;5;239:*.r66=38;5;239:*.r67=38;5;239:*.r68=38;5;239:*.r69=38;5;239: |
129
|
|
|
|
|
|
|
*.r69=38;5;239:*.r70=38;5;239:*.r71=38;5;239:*.r72=38;5;239:*.r73=38;5;239: |
130
|
|
|
|
|
|
|
*.r74=38;5;239:*.r75=38;5;239:*.r76=38;5;239:*.r77=38;5;239:*.r78=38;5;239: |
131
|
|
|
|
|
|
|
*.r79=38;5;239:*.r80=38;5;239:*.r81=38;5;239:*.r82=38;5;239:*.r83=38;5;239: |
132
|
|
|
|
|
|
|
*.r84=38;5;239:*.r85=38;5;239:*.r86=38;5;239:*.r87=38;5;239:*.r88=38;5;239: |
133
|
|
|
|
|
|
|
*.r89=38;5;239:*.r90=38;5;239:*.r91=38;5;239:*.r92=38;5;239:*.r93=38;5;239: |
134
|
|
|
|
|
|
|
*.r94=38;5;239:*.r95=38;5;239:*.r96=38;5;239:*.r97=38;5;239:*.r98=38;5;239: |
135
|
|
|
|
|
|
|
*.r99=38;5;239:*.apk=38;5;215:*.deb=38;5;215:*.jad=38;5;215:*.jar=38;5;215: |
136
|
|
|
|
|
|
|
*.cab=38;5;215:*.pak=38;5;215:*.pk3=38;5;215:*.vdf=38;5;215:*.vpk=38;5;215: |
137
|
|
|
|
|
|
|
*.bsp=38;5;215:*.dmg=38;5;215:*.iso=38;5;124:*.bin=38;5;124:*.nrg=38;5;124: |
138
|
|
|
|
|
|
|
*.qcow=38;5;124:*.sparseimage=38;5;124:*.accdb=38;5;60:*.accde=38;5;60: |
139
|
|
|
|
|
|
|
*.accdr=38;5;60:*.accdt=38;5;60:*.db=38;5;60:*.localstorage=38;5;60: |
140
|
|
|
|
|
|
|
*.sqlite=38;5;60:*.typelib=38;5;60:*.nc=38;5;60:*.part=38;5;239:*~=38;5;241: |
141
|
|
|
|
|
|
|
*.pacnew=38;5;33:*.un~=38;5;241:*.orig=38;5;241:*.BUP=38;5;241:*.bak=38;5;241: |
142
|
|
|
|
|
|
|
*.o=38;5;241:*.rlib=38;5;241:*.swp=38;5;244:*.swo=38;5;244:*.tmp=38;5;244: |
143
|
|
|
|
|
|
|
*.sassc=38;5;244:*.pid=38;5;248:*.state=38;5;248:*lockfile=38;5;248: |
144
|
|
|
|
|
|
|
*.err=38;5;160;1:*.error=38;5;160;1:*.stderr=38;5;160;1:*.dump=38;5;241: |
145
|
|
|
|
|
|
|
*.stackdump=38;5;241:*.zcompdump=38;5;241:*.zwc=38;5;241:*.pcap=38;5;29: |
146
|
|
|
|
|
|
|
*.cap=38;5;29:*.dmp=38;5;29:*.allow=38;5;112:*.deny=38;5;196: |
147
|
|
|
|
|
|
|
*.service=38;5;45:*@.service=38;5;45:*.socket=38;5;45:*.swap=38;5;45: |
148
|
|
|
|
|
|
|
*.device=38;5;45:*.mount=38;5;45:*.automount=38;5;45:*.target=38;5;45: |
149
|
|
|
|
|
|
|
*.path=38;5;45:*.timer=38;5;45:*.snapshot=38;5;45:*.application=38;5;116: |
150
|
|
|
|
|
|
|
*.cue=38;5;116:*.description=38;5;116:*.directory=38;5;116:*.m3u=38;5;116: |
151
|
|
|
|
|
|
|
*.m3u8=38;5;116:*.md5=38;5;116:*.properties=38;5;116:*.sfv=38;5;116: |
152
|
|
|
|
|
|
|
*.srt=38;5;116:*.theme=38;5;116:*.torrent=38;5;116:*.urlview=38;5;116: |
153
|
|
|
|
|
|
|
*.asc=38;5;192;3:*.enc=38;5;192;3:*.gpg=38;5;192;3:*.signature=38;5;192;3: |
154
|
|
|
|
|
|
|
*.sig=38;5;192;3:*.p12=38;5;192;3:*.pem=38;5;192;3:*.pgp=38;5;192;3: |
155
|
|
|
|
|
|
|
*.asc=38;5;192;3:*.enc=38;5;192;3:*.sig=38;5;192;3:*.signature=38;5;192;3: |
156
|
|
|
|
|
|
|
*.32x=38;5;213:*.cdi=38;5;213:*.fm2=38;5;213:*.rom=38;5;213:*.sav=38;5;213: |
157
|
|
|
|
|
|
|
*.st=38;5;213:*.a00=38;5;213:*.a52=38;5;213:*.A64=38;5;213:*.a64=38;5;213: |
158
|
|
|
|
|
|
|
*.a78=38;5;213:*.adf=38;5;213:*.atr=38;5;213:*.gb=38;5;213:*.gba=38;5;213: |
159
|
|
|
|
|
|
|
*.gbc=38;5;213:*.gel=38;5;213:*.gg=38;5;213:*.ggl=38;5;213:*.ipk=38;5;213: |
160
|
|
|
|
|
|
|
*.j64=38;5;213:*.nds=38;5;213:*.nes=38;5;213:*.sms=38;5;213:*.pot=38;5;7: |
161
|
|
|
|
|
|
|
*.pcb=38;5;7:*.mm=38;5;7:*.gbr=38;5;7:*.spl=38;5;7:*.scm=38;5;7: |
162
|
|
|
|
|
|
|
*.Rproj=38;5;11:*.sis=38;5;7:*.1p=38;5;7:*.3p=38;5;7:*.cnc=38;5;7: |
163
|
|
|
|
|
|
|
*.def=38;5;7:*.ex=38;5;7:*.example=38;5;7:*.feature=38;5;7:*.ger=38;5;7: |
164
|
|
|
|
|
|
|
*.map=38;5;7:*.mf=38;5;7:*.mfasl=38;5;7:*.mi=38;5;7:*.mtx=38;5;7:*.pc=38;5;7: |
165
|
|
|
|
|
|
|
*.pi=38;5;7:*.plt=38;5;7:*.pm=38;5;7:*.rb=38;5;7:*.rdf=38;5;7:*.rst=38;5;7: |
166
|
|
|
|
|
|
|
*.ru=38;5;7:*.sch=38;5;7:*.sty=38;5;7:*.sug=38;5;7:*.tdy=38;5;7:*.tfm=38;5;7: |
167
|
|
|
|
|
|
|
*.tfnt=38;5;7:*.tg=38;5;7:*.vcard=38;5;7:*.vcf=38;5;7:*.xln=38;5;7'; |
168
|
|
|
|
|
|
|
|
169
|
|
|
|
|
|
|
|
170
|
|
|
|
|
|
|
$internal_ls_color =~ s/\n//g; |
171
|
|
|
|
|
|
|
|
172
|
|
|
|
|
|
|
my $ls_colors_default = ' |
173
|
|
|
|
|
|
|
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01: |
174
|
|
|
|
|
|
|
cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42: |
175
|
|
|
|
|
|
|
ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31: |
176
|
|
|
|
|
|
|
*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31: |
177
|
|
|
|
|
|
|
*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31: |
178
|
|
|
|
|
|
|
*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31: |
179
|
|
|
|
|
|
|
*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31: |
180
|
|
|
|
|
|
|
*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31: |
181
|
|
|
|
|
|
|
*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31: |
182
|
|
|
|
|
|
|
*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31: |
183
|
|
|
|
|
|
|
*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35 |
184
|
|
|
|
|
|
|
:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35: |
185
|
|
|
|
|
|
|
*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35: |
186
|
|
|
|
|
|
|
*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35: |
187
|
|
|
|
|
|
|
*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35: |
188
|
|
|
|
|
|
|
*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35: |
189
|
|
|
|
|
|
|
*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35: |
190
|
|
|
|
|
|
|
*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35: |
191
|
|
|
|
|
|
|
*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36: |
192
|
|
|
|
|
|
|
*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36: |
193
|
|
|
|
|
|
|
*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36'; |
194
|
|
|
|
|
|
|
|
195
|
|
|
|
|
|
|
$ls_colors_default =~ s/\n|\s+//g; |
196
|
|
|
|
|
|
|
#> |
197
|
|
|
|
|
|
|
|
198
|
|
|
|
|
|
|
# if LS_COLORS environment variable is unset, we use the default gnu |
199
|
|
|
|
|
|
|
# specification from dircolors. |
200
|
|
|
|
|
|
|
|
201
|
|
|
|
|
|
|
my $extracted_ls_colors; |
202
|
|
|
|
|
|
|
my $LS_COLORS = defined($ENV{LS_COLORS}) ? $ENV{LS_COLORS} : $ls_colors_default; |
203
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
# For situations like *.pl=38;5;196;1 (bold and red) |
205
|
|
|
|
|
|
|
my %attributes = ( |
206
|
|
|
|
|
|
|
1 => 'bold', |
207
|
|
|
|
|
|
|
2 => 'faint', |
208
|
|
|
|
|
|
|
3 => 'italic', |
209
|
|
|
|
|
|
|
4 => 'underline', |
210
|
|
|
|
|
|
|
5 => 'blink', |
211
|
|
|
|
|
|
|
6 => 'blink_ms', |
212
|
|
|
|
|
|
|
7 => 'reverse', |
213
|
|
|
|
|
|
|
); |
214
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
# Alright, use our own LS_COLORS definition |
216
|
|
|
|
|
|
|
sub ls_color_internal { |
217
|
0
|
|
|
0
|
1
|
0
|
$LS_COLORS = $internal_ls_color; |
218
|
0
|
|
|
|
|
0
|
$extracted_ls_colors = parse_ls_colors($LS_COLORS); |
219
|
0
|
|
|
|
|
0
|
ls_color(@_); |
220
|
|
|
|
|
|
|
} |
221
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
sub ls_color_custom { |
223
|
1
|
|
|
1
|
1
|
96
|
$LS_COLORS = shift; |
224
|
1
|
|
|
|
|
8
|
$extracted_ls_colors = parse_ls_colors($LS_COLORS); |
225
|
1
|
|
|
|
|
4
|
ls_color(@_); |
226
|
|
|
|
|
|
|
} |
227
|
|
|
|
|
|
|
|
228
|
|
|
|
|
|
|
# Those are the default LS_COLORS mappings from GNU ls |
229
|
|
|
|
|
|
|
sub ls_color_default { |
230
|
1
|
|
|
1
|
1
|
864
|
$LS_COLORS= ' |
231
|
|
|
|
|
|
|
rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01: |
232
|
|
|
|
|
|
|
cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42: |
233
|
|
|
|
|
|
|
ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31: |
234
|
|
|
|
|
|
|
*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31: |
235
|
|
|
|
|
|
|
*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31: |
236
|
|
|
|
|
|
|
*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31: |
237
|
|
|
|
|
|
|
*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31: |
238
|
|
|
|
|
|
|
*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31: |
239
|
|
|
|
|
|
|
*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31: |
240
|
|
|
|
|
|
|
*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31: |
241
|
|
|
|
|
|
|
*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35 |
242
|
|
|
|
|
|
|
:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35: |
243
|
|
|
|
|
|
|
*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35: |
244
|
|
|
|
|
|
|
*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35: |
245
|
|
|
|
|
|
|
*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35: |
246
|
|
|
|
|
|
|
*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35: |
247
|
|
|
|
|
|
|
*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35: |
248
|
|
|
|
|
|
|
*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35: |
249
|
|
|
|
|
|
|
*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36: |
250
|
|
|
|
|
|
|
*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36: |
251
|
|
|
|
|
|
|
*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36'; |
252
|
|
|
|
|
|
|
|
253
|
1
|
|
|
|
|
185
|
$LS_COLORS =~ s/\n|\s+//g; |
254
|
|
|
|
|
|
|
|
255
|
1
|
|
|
|
|
4
|
$extracted_ls_colors = parse_ls_colors($LS_COLORS); |
256
|
1
|
|
|
|
|
4
|
ls_color(@_); |
257
|
|
|
|
|
|
|
} |
258
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
|
260
|
|
|
|
|
|
|
# none of the ls_color_* variations are called, so we use the the |
261
|
|
|
|
|
|
|
# LS_COLORS defined in the environment variable. |
262
|
|
|
|
|
|
|
$extracted_ls_colors = parse_ls_colors($LS_COLORS); |
263
|
|
|
|
|
|
|
|
264
|
|
|
|
|
|
|
|
265
|
|
|
|
|
|
|
sub ls_color { |
266
|
2
|
|
|
2
|
1
|
5
|
my @files; |
267
|
|
|
|
|
|
|
|
268
|
2
|
50
|
|
|
|
7
|
if(ref($_[0]) eq 'ARRAY') { |
269
|
0
|
|
|
|
|
0
|
push(@files, @{$_[0]}); |
|
0
|
|
|
|
|
0
|
|
270
|
0
|
|
|
|
|
0
|
shift @_; |
271
|
|
|
|
|
|
|
} |
272
|
|
|
|
|
|
|
else { |
273
|
2
|
|
|
|
|
6
|
push(@files, @_); |
274
|
|
|
|
|
|
|
} |
275
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
|
277
|
2
|
|
|
|
|
5
|
for my $file(@files) { |
278
|
2
|
|
|
|
|
4
|
chomp $file; |
279
|
2
|
50
|
|
|
|
9
|
next if $file =~ m/^\s+$/; |
280
|
|
|
|
|
|
|
# it's important to keep the dot if there is one. If you remove the dot, |
281
|
|
|
|
|
|
|
# directories named bin/ can be miscolored given a key like |
282
|
|
|
|
|
|
|
# *.bin=38;5;220 |
283
|
|
|
|
|
|
|
|
284
|
2
|
|
|
|
|
10
|
my($ext) = $file =~ m/.*([.]+.+)$/; |
285
|
|
|
|
|
|
|
|
286
|
|
|
|
|
|
|
# since we need to stat files, we need a real filename that's not padded with |
287
|
|
|
|
|
|
|
# whitespace. |
288
|
|
|
|
|
|
|
|
289
|
2
|
|
|
|
|
4
|
my $real_file; |
290
|
2
|
50
|
|
|
|
7
|
if($file =~ m/^\s+(.+)/) { |
291
|
0
|
|
|
|
|
0
|
$real_file = $1; |
292
|
|
|
|
|
|
|
} |
293
|
|
|
|
|
|
|
else { |
294
|
2
|
|
|
|
|
3
|
$real_file = $file; |
295
|
|
|
|
|
|
|
} |
296
|
|
|
|
|
|
|
|
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
# no extension found. let's check file attributes. this will only |
299
|
|
|
|
|
|
|
# work if called with absolute paths or from ./ since we can't stat files that |
300
|
|
|
|
|
|
|
# we can't access. |
301
|
|
|
|
|
|
|
# https://github.com/trapd00r/File-LsColor/issues/1 |
302
|
|
|
|
|
|
|
|
303
|
|
|
|
|
|
|
# ./recup_dir.5/ |
304
|
|
|
|
|
|
|
# Invalid \0 character in pathname for ftdir: \0ls++.conf at LsColor.pm |
305
|
|
|
|
|
|
|
|
306
|
2
|
50
|
|
|
|
8
|
if($real_file !~ m/\0/) { |
307
|
2
|
50
|
|
|
|
73
|
-d $real_file and $ext = 'di'; |
308
|
|
|
|
|
|
|
} |
309
|
|
|
|
|
|
|
|
310
|
2
|
50
|
33
|
|
|
11
|
if( not defined($ext) and $NO_STAT == 0) { |
311
|
0
|
0
|
|
|
|
0
|
-l $real_file and $ext = 'ln'; # symlink |
312
|
0
|
0
|
|
|
|
0
|
-x $real_file and $ext = 'ex'; # executable |
313
|
0
|
0
|
|
|
|
0
|
-d $real_file and $ext = 'di'; # beware, dirs have +x |
314
|
0
|
0
|
|
|
|
0
|
-S $real_file and $ext = 'so'; # socket |
315
|
0
|
0
|
|
|
|
0
|
-p $real_file and $ext = 'pi'; # fifo, pipe |
316
|
0
|
0
|
|
|
|
0
|
-b $real_file and $ext = 'bd'; # block device |
317
|
0
|
0
|
|
|
|
0
|
-c $real_file and $ext = 'cd'; # character special file |
318
|
|
|
|
|
|
|
|
319
|
|
|
|
|
|
|
# special case for directories that we can't stat, but we can still safely |
320
|
|
|
|
|
|
|
# assume that they are in fact dirs. |
321
|
|
|
|
|
|
|
|
322
|
0
|
0
|
|
|
|
0
|
$real_file =~ m{/$} and $ext = 'di'; |
323
|
|
|
|
|
|
|
} |
324
|
|
|
|
|
|
|
|
325
|
2
|
50
|
|
|
|
8
|
if(!defined($ext)) { |
326
|
|
|
|
|
|
|
# Since these: |
327
|
|
|
|
|
|
|
# Makefile |
328
|
|
|
|
|
|
|
# README |
329
|
|
|
|
|
|
|
# *Makefile.PL |
330
|
|
|
|
|
|
|
# are all perfectly valid keys |
331
|
0
|
|
|
|
|
0
|
$ext = $real_file; |
332
|
|
|
|
|
|
|
} |
333
|
|
|
|
|
|
|
|
334
|
2
|
50
|
0
|
|
|
9
|
if(exists($extracted_ls_colors->{$real_file})) { |
|
|
50
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
335
|
0
|
|
|
|
|
0
|
$file = fg($extracted_ls_colors->{$real_file}, $file); |
336
|
|
|
|
|
|
|
} |
337
|
|
|
|
|
|
|
elsif(exists($extracted_ls_colors->{$ext})) { |
338
|
2
|
|
|
|
|
12
|
$file = fg($extracted_ls_colors->{$ext}, $file); |
339
|
|
|
|
|
|
|
} |
340
|
|
|
|
|
|
|
|
341
|
|
|
|
|
|
|
# We haven't found a valid extension -> color mapping yet, but if |
342
|
|
|
|
|
|
|
# IGNORE_CASE is true, check if the lowercase version of the capitalized |
343
|
|
|
|
|
|
|
# extension does in fact exist. |
344
|
|
|
|
|
|
|
# Just make sure to use the non-lc version while returning. |
345
|
|
|
|
|
|
|
# https://github.com/trapd00r/File-LsColor/issues/9 |
346
|
|
|
|
|
|
|
|
347
|
|
|
|
|
|
|
elsif($IGNORE_CASE && $extracted_ls_colors->{lc($ext)}) { |
348
|
0
|
|
|
|
|
0
|
$file = fg($extracted_ls_colors->{lc($ext)}, $file); |
349
|
|
|
|
|
|
|
} |
350
|
|
|
|
|
|
|
else { |
351
|
|
|
|
|
|
|
# $file = fg(32, $file); |
352
|
|
|
|
|
|
|
} |
353
|
|
|
|
|
|
|
} |
354
|
2
|
100
|
|
|
|
141
|
return wantarray() ? @files : join('', @files); |
355
|
|
|
|
|
|
|
} |
356
|
|
|
|
|
|
|
|
357
|
|
|
|
|
|
|
|
358
|
|
|
|
|
|
|
sub get_ls_colors { |
359
|
6
|
|
|
6
|
1
|
15
|
return parse_ls_colors() |
360
|
|
|
|
|
|
|
} |
361
|
|
|
|
|
|
|
|
362
|
|
|
|
|
|
|
|
363
|
|
|
|
|
|
|
sub parse_ls_colors { |
364
|
5
|
50
|
|
5
|
1
|
20
|
if(@_) { |
365
|
5
|
|
|
|
|
11
|
$LS_COLORS = shift @_; |
366
|
|
|
|
|
|
|
} |
367
|
|
|
|
|
|
|
|
368
|
|
|
|
|
|
|
# if( (!defined($LS_COLORS)) or ($LS_COLORS eq '') ) { |
369
|
|
|
|
|
|
|
# croak("LS_COLORS variable not set! Nothing to do...\n"); |
370
|
|
|
|
|
|
|
# } |
371
|
|
|
|
|
|
|
# *.flac=38;5;196 |
372
|
5
|
|
|
|
|
73
|
my @entities = split(/:/, $LS_COLORS); |
373
|
|
|
|
|
|
|
|
374
|
5
|
|
|
|
|
10
|
my %ft; |
375
|
5
|
|
|
|
|
11
|
for my $ent(@entities) { |
376
|
|
|
|
|
|
|
# account for: |
377
|
|
|
|
|
|
|
# *.flac - but keep the dot in the extension |
378
|
|
|
|
|
|
|
# *MANIFEST |
379
|
390
|
|
|
|
|
1177
|
my ($filetype, $attributes) = $ent =~ m/[*]*(.?\S+)=([\d;]+|target)/; |
380
|
|
|
|
|
|
|
# print "extracted ft: $filetype | attr: $attributes\n"; |
381
|
390
|
|
|
|
|
937
|
$ft{$filetype} = $attributes; |
382
|
|
|
|
|
|
|
} |
383
|
|
|
|
|
|
|
|
384
|
|
|
|
|
|
|
# if symlink value is target, we use the target key's value |
385
|
|
|
|
|
|
|
# if($ft{ln} eq 'target') { |
386
|
|
|
|
|
|
|
# $ft{ln} = $ft{target}; |
387
|
|
|
|
|
|
|
# } |
388
|
|
|
|
|
|
|
|
389
|
|
|
|
|
|
|
# account for: |
390
|
|
|
|
|
|
|
# *.flac |
391
|
|
|
|
|
|
|
# *MANIFEST |
392
|
5
|
|
|
|
|
94
|
return \%ft; |
393
|
|
|
|
|
|
|
} |
394
|
|
|
|
|
|
|
|
395
|
|
|
|
|
|
|
sub can_ls_color { |
396
|
6
|
|
|
6
|
1
|
236
|
my $ft = shift; |
397
|
6
|
|
|
|
|
15
|
my $table = get_ls_colors(); |
398
|
|
|
|
|
|
|
|
399
|
6
|
|
|
|
|
71
|
$ft =~ s/^\s+//; |
400
|
|
|
|
|
|
|
|
401
|
|
|
|
|
|
|
|
402
|
|
|
|
|
|
|
# if called with an extension that exists, return it. |
403
|
6
|
100
|
|
|
|
31
|
return $table->{$ft} if $table->{$ft}; |
404
|
3
|
100
|
|
|
|
18
|
return $table->{".$ft"} if $table->{".$ft"}; |
405
|
|
|
|
|
|
|
|
406
|
|
|
|
|
|
|
# else, check if called with a filename.ext |
407
|
|
|
|
|
|
|
# return undef if all else fails |
408
|
|
|
|
|
|
|
{ |
409
|
2
|
|
|
2
|
|
21
|
no warnings; |
|
2
|
|
|
|
|
10
|
|
|
2
|
|
|
|
|
433
|
|
|
2
|
|
|
|
|
4
|
|
410
|
2
|
|
|
|
|
8
|
my($ext) = $ft =~ m/^.*([.].+)$/; |
411
|
2
|
100
|
|
|
|
16
|
return $table->{$ext} ? $table->{$ext} : undef; |
412
|
|
|
|
|
|
|
} |
413
|
|
|
|
|
|
|
} |
414
|
|
|
|
|
|
|
|
415
|
|
|
|
|
|
|
sub slack_code_to_ls_code { |
416
|
0
|
|
|
0
|
1
|
|
my %slack = ( |
417
|
|
|
|
|
|
|
NORMAL => 'no', |
418
|
|
|
|
|
|
|
NORM => 'no', |
419
|
|
|
|
|
|
|
FILE => 'fi', |
420
|
|
|
|
|
|
|
RESET => 'rs', |
421
|
|
|
|
|
|
|
DIR => 'di', |
422
|
|
|
|
|
|
|
LNK => 'ln', |
423
|
|
|
|
|
|
|
LINK => 'ln', |
424
|
|
|
|
|
|
|
SYMLINK => 'ln', |
425
|
|
|
|
|
|
|
ORPHAN => 'or', |
426
|
|
|
|
|
|
|
MISSING => 'mi', |
427
|
|
|
|
|
|
|
FIFO => 'pi', |
428
|
|
|
|
|
|
|
PIPE => 'pi', |
429
|
|
|
|
|
|
|
SOCK => 'so', |
430
|
|
|
|
|
|
|
BLK => 'bd', |
431
|
|
|
|
|
|
|
BLOCK => 'bd', |
432
|
|
|
|
|
|
|
CHR => 'cd', |
433
|
|
|
|
|
|
|
CHAR => 'cd', |
434
|
|
|
|
|
|
|
DOOR => 'do', |
435
|
|
|
|
|
|
|
EXEC => 'ex', |
436
|
|
|
|
|
|
|
LEFT => 'lc', |
437
|
|
|
|
|
|
|
LEFTCODE => 'lc', |
438
|
|
|
|
|
|
|
RIGHT => 'rc', |
439
|
|
|
|
|
|
|
RIGHTCODE => 'rc', |
440
|
|
|
|
|
|
|
END => 'ec', |
441
|
|
|
|
|
|
|
ENDCODE => 'ec', |
442
|
|
|
|
|
|
|
SUID => 'su', |
443
|
|
|
|
|
|
|
SETUID => 'su', |
444
|
|
|
|
|
|
|
SGID => 'sg', |
445
|
|
|
|
|
|
|
SETGID => 'sg', |
446
|
|
|
|
|
|
|
STICKY => 'st', |
447
|
|
|
|
|
|
|
OTHER_WRITABLE => 'ow', |
448
|
|
|
|
|
|
|
OWR => 'ow', |
449
|
|
|
|
|
|
|
STICKY_OTHER_WRITABLE => 'tw', |
450
|
|
|
|
|
|
|
OWT => 'tw', |
451
|
|
|
|
|
|
|
CAPABILITY => 'ca', |
452
|
|
|
|
|
|
|
MULTIHARDLINK => 'mh', |
453
|
|
|
|
|
|
|
CLRTOEOL => 'cl', |
454
|
|
|
|
|
|
|
NULL => 'NULL', |
455
|
|
|
|
|
|
|
); |
456
|
|
|
|
|
|
|
|
457
|
0
|
|
|
|
|
|
my $query = shift; |
458
|
|
|
|
|
|
|
return $slack{uc($query)} |
459
|
0
|
0
|
|
|
|
|
? $slack{uc($query)} |
460
|
|
|
|
|
|
|
: undef; |
461
|
|
|
|
|
|
|
} |
462
|
|
|
|
|
|
|
|
463
|
|
|
|
|
|
|
|
464
|
|
|
|
|
|
|
|
465
|
|
|
|
|
|
|
1; |
466
|
|
|
|
|
|
|
|
467
|
|
|
|
|
|
|
|
468
|
|
|
|
|
|
|
__END__ |