summaryrefslogtreecommitdiff
path: root/Master/tlpkg/TeXLive/TLPDB.pm
diff options
context:
space:
mode:
Diffstat (limited to 'Master/tlpkg/TeXLive/TLPDB.pm')
-rw-r--r--Master/tlpkg/TeXLive/TLPDB.pm131
1 files changed, 89 insertions, 42 deletions
diff --git a/Master/tlpkg/TeXLive/TLPDB.pm b/Master/tlpkg/TeXLive/TLPDB.pm
index 160d783ba60..a5107eb3e5d 100644
--- a/Master/tlpkg/TeXLive/TLPDB.pm
+++ b/Master/tlpkg/TeXLive/TLPDB.pm
@@ -38,6 +38,7 @@ C<TeXLive::TLPDB> -- A database of TeX Live Packages
$tlpdb->updmap_cfg_lines;
$tlpdb->fmtutil_cnf_lines;
$tlpdb->language_dat_lines;
+ $tlpdb->language_def_lines;
$tlpdb->package_revision("packagename");
$tlpdb->location;
$tlpdb->config_src_container;
@@ -912,11 +913,6 @@ sub fmtutil_cnf_lines {
}
}
my @formatlines;
- open(INFILE,"<$self->{'root'}/texmf/fmtutil/fmtutil-hdr.cnf")
- or die("Cannot open $self->{'root'}/texmf/fmtutil/fmtutil-hdr.cnf\n");
- my @tmp = <INFILE>;
- close (INFILE);
- push @formatlines, @tmp;
foreach my $f (sort keys %fmtcnffiles) {
open(INFILE,"<$self->{'root'}/texmf/fmtutil/format.$f.cnf")
or tlwarn("Cannot open $self->{'root'}/texmf/fmtutil/format.$f.cnf\nThe generated fmtutil.cnf file might be incomplete!\nError: $!\n");
@@ -949,11 +945,6 @@ sub updmap_cfg_lines {
}
}
my @updmaplines;
- open(UPDHDR,"<$self->{'root'}/texmf/web2c/updmap-hdr.cfg")
- or die("Cannot find $self->{'root'}/texmf/web2c/updmap-hdr.cfg!\n");
- my @tmp = <UPDHDR>;
- close(UPDHDR);
- push @updmaplines, @tmp;
foreach (sort keys %maps) {
if ($maps{$_} == 2) {
push @updmaplines, "MixedMap $_\n";
@@ -966,50 +957,106 @@ sub updmap_cfg_lines {
=item C<< $tlpdb->language_dat_lines >>
-The function C<language_dat_lines> returns the concatenation of all
-files specified in C<BuildLanguageDat execute> directives in the present
-TLPDB. Exception: the result always begins with the contents of
-C<language.us> file. This and all the other files are looked for in
-C<TLROOT/texmf/tex/generic/config>.
+The function C<language_dat_lines> returns the list of all
+lines for language.dat that can be generated from the tlpdb.
=cut
+
sub language_dat_lines {
+ sub make_dat_lines {
+ my ($name, $lhm, $rhm, $file, @syn) = @_;
+ my @ret;
+ push @ret, "$name $file\n";
+ foreach (@syn) {
+ push @ret, "=$_\n";
+ }
+ return(@ret);
+ }
my $self = shift;
- my %langfiles;
- foreach my $p ($self->list_packages) {
- my $obj = $self->get_package ($p);
- die "No TeX Live package named $p, too strange" if ! $obj;
- foreach my $e ($obj->executes) {
- if ($e =~ m/BuildLanguageDat (.*)$/) {
- $langfiles{$1} = 1;
- }
- # others are ignored here
+ my @lines = $self->_parse_hyphen_execute(\&make_dat_lines);
+ return(@lines);
+}
+
+=item C<< $tlpdb->language_def_lines >>
+
+The function C<language_def_lines> returns the list of all
+lines for language.def that can be generated from the tlpdb.
+
+=cut
+
+sub language_def_lines {
+ sub make_def_lines {
+ my ($name, $lhm, $rhm, $file, @syn) = @_;
+ my $exc = "";
+ my @ret;
+ push @ret, "\\addlanguage\{$name\}\{$file\}\{$exc\}\{$lhm\}\{$rhm\}\n";
+ foreach (@syn) {
+ # synonyms in language.def ???
+ push @ret, "\\addlanguage\{$_\}\{$file\}\{$exc\}\{$lhm\}\{$rhm\}\n";
+ #debug("Ignoring synonym $_ for $name when creating language.def\n");
}
+ return(@ret);
}
+ my $self = shift;
+ my @lines = $self->_parse_hyphen_execute(\&make_def_lines);
+ return(@lines);
+}
+
+
+
+sub _parse_hyphen_execute {
+ my ($self, $coderef) = @_;
my @langlines = ();
- # must start with language.us.
- local *LANHDR;
- $LANHDR = "<$self->{'root'}/texmf/tex/generic/config/language.us";
- open (LANHDR) or die "open($LANHDR) failed: $!";
- my @tmp = <LANHDR>;
- close (LANHDR);
- push @langlines, @tmp;
-
- local *INFILE;
- foreach my $f (sort keys %langfiles) {
- $INFILE = "<$self->{'root'}/texmf/tex/generic/config/language.$f.dat";
- open (INFILE)
- or tlwarn("Cannot open $self->{'root'}/texmf/tex/generic/config/language.$f.dat\nThe generated language.dat file might be incomplete!\nError: $!\n");
- @tmp = <INFILE>;
- close (INFILE);
- push @langlines, @tmp;
+ foreach my $pkg ($self->list_packages) {
+ my $obj = $self->get_package ($pkg);
+ die "No TeX Live package named $pkg, too strange" if ! $obj;
+ foreach my $e ($obj->executes) {
+ my $first = 1;
+ if ($e =~ m/AddHyphen\s+(.*)\s*/) {
+ my $name;
+ my $lefthyphenmin;
+ my $righthyphenmin;
+ my $file;
+ my @synonyms;
+ if ($first) {
+ push @langlines, "% lines generated from $pkg\n";
+ $first = 0;
+ }
+ foreach my $p (split(' ', $1)) {
+ my ($a, $b) = split /=/, $p;
+ if ($a eq "name") {
+ die "AddHyphen line needs name=something: $pkg, $e" unless $b;
+ $name = $b; next;
+ }
+ if ($a eq "lefthyphenmin") {
+ # lefthyphenmin default to 3
+ $lefthyphenmin = ( $b ? $b : 2 );
+ next;
+ }
+ if ($a eq "righthyphenmin") {
+ $righthyphenmin = ( $b ? $b : 3);
+ next;
+ }
+ if ($a eq "file") {
+ die "AddHyphen line needs file=something: $pkg, $e" unless $b;
+ $file = $b;
+ next;
+ }
+ if ($a eq "synonyms") {
+ @synonyms = split /,/, $b;
+ next;
+ }
+ die "Unknown language directive in $pkg: $e";
+ }
+ my @foo = &$coderef ($name, $lefthyphenmin, $righthyphenmin, $file, @synonyms);
+ push @langlines, @foo;
+ }
+ }
}
-
return @langlines;
}
-
=back
=pod