+sub _embed_file_directive {
+ my ($self, $file) = @_;
+
+ # { source => $xmlfile,
+ # name => 'factur-x.xml',
+ # description => $::locale->text('Factur-X/ZUGFeRD invoice'), }
+
+ my $file_name = blessed($file->{source}) && $file->{source}->can('filename') ? $file->{source}->filename : "" . $file->{source}->filename;
+ my $embed_name = $file->{name} // $file_name;
+ $embed_name =~ s{.*/}{};
+
+ my $embed_name_ascii = $::locale->quote_special_chars('filenames', $embed_name);
+ $embed_name_ascii =~ s{[^a-z0-9!@#$%^&*(){}[\],.+'"=_-]+}{}gi;
+
+ my @options;
+
+ my $add_opt = sub {
+ my ($name, $value) = @_;
+ return if ($value // '') eq '';
+ push @options, sprintf('%s={%s}', $name, $value); # TODO: escaping
+ };
+
+ $add_opt->('filespec', $embed_name_ascii);
+ $add_opt->('ucfilespec', $embed_name);
+ $add_opt->('desc', $file->{description});
+ $add_opt->('afrelationship', $file->{relationship});
+ $add_opt->('mimetype', $file->{mime_type});
+
+ return sprintf('\embedfile[%s]{%s}', join(',', @options), $file_name);
+}
+