xref: /aosp_15_r20/external/e2fsprogs/po/at-expand.pl (revision 6a54128f25917bfc36a8a6e9d722c04a0b4641b6)
1*6a54128fSAndroid Build Coastguard Worker#!/usr/bin/perl
2*6a54128fSAndroid Build Coastguard Worker
3*6a54128fSAndroid Build Coastguard Workermy @translator_help = (
4*6a54128fSAndroid Build Coastguard Worker "#. The strings in e2fsck's problem.c can be very hard to translate,\n",
5*6a54128fSAndroid Build Coastguard Worker "#. since the strings are expanded in two different ways.  First of all,\n",
6*6a54128fSAndroid Build Coastguard Worker "#. there is an \@-expansion, where strings like \"\@i\" are expanded to\n",
7*6a54128fSAndroid Build Coastguard Worker "#. \"inode\", and so on.  In order to make it easier for translators, the\n",
8*6a54128fSAndroid Build Coastguard Worker "#. e2fsprogs po template file has been enhanced with comments that show\n",
9*6a54128fSAndroid Build Coastguard Worker "#. the \@-expansion, for the strings in the problem.c file.\n",
10*6a54128fSAndroid Build Coastguard Worker "#.\n",
11*6a54128fSAndroid Build Coastguard Worker "#. Translators are free to use the \@-expansion facility if they so\n",
12*6a54128fSAndroid Build Coastguard Worker "#. choose, by providing translations for strings in e2fsck/message.c.\n",
13*6a54128fSAndroid Build Coastguard Worker "#. These translation can completely replace an expansion; for example,\n",
14*6a54128fSAndroid Build Coastguard Worker "#. if \"bblock\" (which indicated that \"\@b\" would be expanded to \"block\")\n",
15*6a54128fSAndroid Build Coastguard Worker "#. is translated as \"ddatenverlust\", then \"\@d\" will be expanded to\n",
16*6a54128fSAndroid Build Coastguard Worker "#. \"datenverlust\".  Alternatively, translators can simply not use the\n",
17*6a54128fSAndroid Build Coastguard Worker "#. \@-expansion facility at all.\n",
18*6a54128fSAndroid Build Coastguard Worker "#.\n",
19*6a54128fSAndroid Build Coastguard Worker "#. The second expansion which is done for e2fsck's problem.c messages is\n",
20*6a54128fSAndroid Build Coastguard Worker "#. a dynamic %-expansion, which expands %i as an inode number, and so\n",
21*6a54128fSAndroid Build Coastguard Worker "#. on.  A table of these expansions can be found below.  Note that\n",
22*6a54128fSAndroid Build Coastguard Worker "#. %-expressions that begin with \"%D\" and \"%I\" are two-character\n",
23*6a54128fSAndroid Build Coastguard Worker "#. expansions; so for example, \"%Iu\" expands to the inode's user id\n",
24*6a54128fSAndroid Build Coastguard Worker "#. ownership field (inode->i_uid).  Also the \"%B\" expansion is special:\n",
25*6a54128fSAndroid Build Coastguard Worker "#. it can expand to either the string \"indirect block\" (possibly preceded\n",
26*6a54128fSAndroid Build Coastguard Worker "#. by the word \"double\" or \"triple\"), or the string \"block #\" immediately\n",
27*6a54128fSAndroid Build Coastguard Worker "#. followed by an integer indicating a block sequence number.\n",
28*6a54128fSAndroid Build Coastguard Worker "#.\n",
29*6a54128fSAndroid Build Coastguard Worker "#. Please note that the %-expansion for most e2fsck's problem.c should not\n",
30*6a54128fSAndroid Build Coastguard Worker "#. use positional indicators such as %1$c, since although they look like c-style\n",
31*6a54128fSAndroid Build Coastguard Worker "#. format strings, they are NOT c-style format strings, and the positional\n",
32*6a54128fSAndroid Build Coastguard Worker "#. indicators (which BTW are GNU extensions and so won't work on other Unix\n",
33*6a54128fSAndroid Build Coastguard Worker "#. gettext implementations) won't work with e2fsck's print_e2fsck_message()\n",
34*6a54128fSAndroid Build Coastguard Worker "#. function found in e2fsck/message.c\n",
35*6a54128fSAndroid Build Coastguard Worker "#.\n",
36*6a54128fSAndroid Build Coastguard Worker "#.	%b	<blk>			block number\n",
37*6a54128fSAndroid Build Coastguard Worker "#.	%B	\"indirect block\" | \"block #\"<blkcount>	string | string+integer\n",
38*6a54128fSAndroid Build Coastguard Worker "#.	%c	<blk2>			block number\n",
39*6a54128fSAndroid Build Coastguard Worker "#.	%Di	<dirent> -> ino		inode number\n",
40*6a54128fSAndroid Build Coastguard Worker "#.	%Dn	<dirent> -> name	string\n",
41*6a54128fSAndroid Build Coastguard Worker "#.	%Dr	<dirent> -> rec_len\n",
42*6a54128fSAndroid Build Coastguard Worker "#.	%Dl	<dirent> -> name_len\n",
43*6a54128fSAndroid Build Coastguard Worker "#.	%Dt	<dirent> -> filetype\n",
44*6a54128fSAndroid Build Coastguard Worker "#.	%d	<dir> 			inode number\n",
45*6a54128fSAndroid Build Coastguard Worker "#.	%g	<group>			integer\n",
46*6a54128fSAndroid Build Coastguard Worker "#.	%i	<ino>			inode number\n",
47*6a54128fSAndroid Build Coastguard Worker "#.	%Is	<inode> -> i_size\n",
48*6a54128fSAndroid Build Coastguard Worker "#.	%IS	<inode> -> i_extra_isize\n",
49*6a54128fSAndroid Build Coastguard Worker "#.	%Ib	<inode> -> i_blocks\n",
50*6a54128fSAndroid Build Coastguard Worker "#.	%Il	<inode> -> i_links_count\n",
51*6a54128fSAndroid Build Coastguard Worker "#.	%Im	<inode> -> i_mode\n",
52*6a54128fSAndroid Build Coastguard Worker "#.	%IM	<inode> -> i_mtime\n",
53*6a54128fSAndroid Build Coastguard Worker "#.	%IF	<inode> -> i_faddr\n",
54*6a54128fSAndroid Build Coastguard Worker "#.	%If	<inode> -> i_file_acl\n",
55*6a54128fSAndroid Build Coastguard Worker "#.	%Id	<inode> -> i_size_high\n",
56*6a54128fSAndroid Build Coastguard Worker "#.	%Iu	<inode> -> i_uid\n",
57*6a54128fSAndroid Build Coastguard Worker "#.	%Ig	<inode> -> i_gid\n",
58*6a54128fSAndroid Build Coastguard Worker "#.	%It	<str>			file type\n",
59*6a54128fSAndroid Build Coastguard Worker "#.	%j	<ino2>			inode number\n",
60*6a54128fSAndroid Build Coastguard Worker "#.	%m	<com_err error message>\n",
61*6a54128fSAndroid Build Coastguard Worker "#.	%N	<num>\n",
62*6a54128fSAndroid Build Coastguard Worker "#.	%p		ext2fs_get_pathname of directory <ino>\n",
63*6a54128fSAndroid Build Coastguard Worker "#.	%P		ext2fs_get_pathname of <dirent>->ino with <ino2> as\n",
64*6a54128fSAndroid Build Coastguard Worker "#.				the containing directory.  (If dirent is NULL\n",
65*6a54128fSAndroid Build Coastguard Worker "#.				then return the pathname of directory <ino2>)\n",
66*6a54128fSAndroid Build Coastguard Worker "#.	%q		ext2fs_get_pathname of directory <dir>\n",
67*6a54128fSAndroid Build Coastguard Worker "#.	%Q		ext2fs_get_pathname of directory <ino> with <dir> as\n",
68*6a54128fSAndroid Build Coastguard Worker "#.				the containing directory.\n",
69*6a54128fSAndroid Build Coastguard Worker "#.	%s	<str>			miscellaneous string\n",
70*6a54128fSAndroid Build Coastguard Worker "#.	%S		backup superblock\n",
71*6a54128fSAndroid Build Coastguard Worker "#.	%X	<num>	hexadecimal format\n",
72*6a54128fSAndroid Build Coastguard Worker "#.\n");
73*6a54128fSAndroid Build Coastguard Worker
74*6a54128fSAndroid Build Coastguard Workermy $is_problem_file = 0;
75*6a54128fSAndroid Build Coastguard Workermy $save_msg;
76*6a54128fSAndroid Build Coastguard Workermy $msg_accum = "";
77*6a54128fSAndroid Build Coastguard Workermy $msg;
78*6a54128fSAndroid Build Coastguard Workermy $expanded = 0;
79*6a54128fSAndroid Build Coastguard Workermy $lines = 0;
80*6a54128fSAndroid Build Coastguard Worker
81*6a54128fSAndroid Build Coastguard Workersub do_expand {
82*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@a/extended attribute/g;
83*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@A/error allocating/g;
84*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@b/block/g;
85*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@B/bitmap/g;
86*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@c/compress/g;
87*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@C/conflicts with some other fs block/g;
88*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@i/inode/g;
89*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@I/illegal/g;
90*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@j/journal/g;
91*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@D/deleted/g;
92*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@d/directory/g;
93*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@e/entry/g;
94*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@E/entry '%Dn' in %p (%i)/g;
95*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@f/filesystem/g;
96*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@F/for inode %i (%Q) is/g;
97*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@g/group/g;
98*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@h/HTREE directory inode/g;
99*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@l/lost+found/g;
100*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@L/is a link/g;
101*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@m/multiply-claimed/g;
102*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@n/invalid/g;
103*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@o/orphaned/g;
104*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@p/problem in/g;
105*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@q/quota/g;
106*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@r/root inode/g;
107*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@s/should be/g;
108*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@S/superblock/g;
109*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@u/unattached/g;
110*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@v/device/g;
111*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@x/extent/g;
112*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@z/zero-length/g;
113*6a54128fSAndroid Build Coastguard Worker    $msg =~ s/\@\@/@/g;
114*6a54128fSAndroid Build Coastguard Worker}
115*6a54128fSAndroid Build Coastguard Worker
116*6a54128fSAndroid Build Coastguard Worker
117*6a54128fSAndroid Build Coastguard Workerwhile (<>) {
118*6a54128fSAndroid Build Coastguard Worker    $lines++;
119*6a54128fSAndroid Build Coastguard Worker    if ($lines == 6) {
120*6a54128fSAndroid Build Coastguard Worker	print @translator_help;
121*6a54128fSAndroid Build Coastguard Worker    }
122*6a54128fSAndroid Build Coastguard Worker    if (/^#: /)
123*6a54128fSAndroid Build Coastguard Worker    {
124*6a54128fSAndroid Build Coastguard Worker	$is_problem_file = (/^#: e2fsck\/problem/) ? 1 : 0;
125*6a54128fSAndroid Build Coastguard Worker    }
126*6a54128fSAndroid Build Coastguard Worker    $msg = "";
127*6a54128fSAndroid Build Coastguard Worker    if (/^msgid / && $is_problem_file) {
128*6a54128fSAndroid Build Coastguard Worker	($msg) = /^msgid "(.*)"$/;
129*6a54128fSAndroid Build Coastguard Worker	$save_msgid = $_;
130*6a54128fSAndroid Build Coastguard Worker	if ($msg =~ /\@/) {
131*6a54128fSAndroid Build Coastguard Worker	    $expanded++;
132*6a54128fSAndroid Build Coastguard Worker	}
133*6a54128fSAndroid Build Coastguard Worker	&do_expand();
134*6a54128fSAndroid Build Coastguard Worker	if ($msg ne "") {
135*6a54128fSAndroid Build Coastguard Worker	    $msg_accum = $msg_accum . "#. \@-expanded: $msg\n";
136*6a54128fSAndroid Build Coastguard Worker	}
137*6a54128fSAndroid Build Coastguard Worker	next;
138*6a54128fSAndroid Build Coastguard Worker    }
139*6a54128fSAndroid Build Coastguard Worker    if (/^"/ && $is_problem_file) {
140*6a54128fSAndroid Build Coastguard Worker	($msg) = /^"(.*)"$/;
141*6a54128fSAndroid Build Coastguard Worker	$save_msgid = $save_msgid . $_;
142*6a54128fSAndroid Build Coastguard Worker	if ($msg =~ /\@/) {
143*6a54128fSAndroid Build Coastguard Worker	    $expanded++;
144*6a54128fSAndroid Build Coastguard Worker	}
145*6a54128fSAndroid Build Coastguard Worker	&do_expand();
146*6a54128fSAndroid Build Coastguard Worker	$msg_accum = $msg_accum . "#. \@-expanded: $msg\n";
147*6a54128fSAndroid Build Coastguard Worker	next;
148*6a54128fSAndroid Build Coastguard Worker    }
149*6a54128fSAndroid Build Coastguard Worker    if (/^msgstr / && $is_problem_file) {
150*6a54128fSAndroid Build Coastguard Worker	if ($expanded) {
151*6a54128fSAndroid Build Coastguard Worker	    print $msg_accum;
152*6a54128fSAndroid Build Coastguard Worker	}
153*6a54128fSAndroid Build Coastguard Worker	print $save_msgid;
154*6a54128fSAndroid Build Coastguard Worker	$msg_accum = "";
155*6a54128fSAndroid Build Coastguard Worker	$expanded = 0;
156*6a54128fSAndroid Build Coastguard Worker    }
157*6a54128fSAndroid Build Coastguard Worker    print $_;
158*6a54128fSAndroid Build Coastguard Worker}
159