diff options
author | Norbert Preining <preining@logic.at> | 2013-09-15 02:43:26 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2013-09-15 02:43:26 +0000 |
commit | c58792b048d9b6ccc220792a0a7b13c90b08fc38 (patch) | |
tree | 191404eee31c37bc1c04d51982096c22ea880216 /Master/tlpkg | |
parent | b075e08d194788192d57156f1e64dc93d2591065 (diff) |
read arbitrary stupid quoting in docfile tags
git-svn-id: svn://tug.org/texlive/trunk@31656 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg')
-rw-r--r-- | Master/tlpkg/TeXLive/TLPOBJ.pm | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/Master/tlpkg/TeXLive/TLPOBJ.pm b/Master/tlpkg/TeXLive/TLPOBJ.pm index a9835dff314..e7d89909630 100644 --- a/Master/tlpkg/TeXLive/TLPOBJ.pm +++ b/Master/tlpkg/TeXLive/TLPOBJ.pm @@ -118,14 +118,23 @@ sub from_fh { # docfiles can have tags, but the parse_line function is so # time intense that we try to call it only when necessary if (defined $rest) { - my @words = &TeXLive::TLUtils::parse_line('\s+', 0, $rest); - for (@words) { - my ($k, $v) = split('=', $_, 2); - if ($k eq 'details' || $k eq 'language') { - $self->{'docfiledata'}{$f}{$k} = $v; - } else { - die "Unknown docfile tag: $line"; - } + # parse_line has problems with double quotes in double quotes + # my @words = &TeXLive::TLUtils::parse_line('\s+', 0, $rest); + # do manual parsing + # this is not optimal, but since we support only two tags there + # are not so many cases + if ($rest =~ m/^details="(.*)"\s*$/) { + $self->{'docfiledata'}{$f}{'details'} = $1; + } elsif ($rest =~ m/^language="(.*)"\s*$/) { + $self->{'docfiledata'}{$f}{'language'} = $1; + } elsif ($rest =~ m/^language="(.*)"\s+details="(.*)"\s*$/) { + $self->{'docfiledata'}{$f}{'details'} = $2; + $self->{'docfiledata'}{$f}{'language'} = $1; + } elsif ($rest =~ m/^details="(.*)"\s+language="(.*)"\s*$/) { + $self->{'docfiledata'}{$f}{'details'} = $1; + $self->{'docfiledata'}{$f}{'language'} = $2; + } else { + die "Unparsable tagging in line: =$line="; } } } elsif ($lastcmd eq "binfiles") { @@ -311,12 +320,12 @@ sub writeout { print $fd " $f"; if (defined($self->{'docfiledata'}{$f}{'details'})) { my $tmp = $self->{'docfiledata'}{$f}{'details'}; - $tmp =~ s/\"/\\\"/g; + #$tmp =~ s/\"/\\\"/g; print $fd ' details="', $tmp, '"'; } if (defined($self->{'docfiledata'}{$f}{'language'})) { my $tmp = $self->{'docfiledata'}{$f}{'language'}; - $tmp =~ s/\"/\\\"/g; + #$tmp =~ s/\"/\\\"/g; print $fd ' language="', $tmp, '"'; } print $fd "\n"; |