sub
new {
my
(
$class
,
%options
) =
@_
;
$options
{resource_directory} =
'mi'
unless
defined
$options
{resource_directory};
$options
{resource_prefix} =
'mi'
unless
defined
$options
{resource_prefix};
return
$class
->LaTeXML::Post::LaTeXImages::new(
%options
); }
sub
toProcess {
my
(
$self
,
$doc
) =
@_
;
return
$doc
->findnodes(
'//ltx:Math'
); }
sub
extractTeX {
my
(
$self
,
$doc
,
$node
) =
@_
;
my
$mode
=
uc
(
$node
->getAttribute(
'mode'
) ||
'INLINE'
);
my
$tex
=
$self
->cleanTeX(
$node
->getAttribute(
'tex'
));
return
unless
defined
$tex
;
$mode
=
'DISPLAY'
if
$tex
=~ s/^\s*\\displaystyle\s+//;
return
(
$tex
=~ /^\s*$/ ?
undef
:
"\\begin$mode $tex\\end$mode"
); }
sub
setTeXImage {
return
; }
our
%MIMETYPES
= (
gif
=>
'image/gif'
,
jpeg
=>
'image/jpeg'
,
png
=>
'image/png'
,
svg
=>
'image/svg+xml'
);
sub
preprocess {
my
(
$self
,
$doc
,
@nodes
) =
@_
;
return
$self
->generateImages(
$doc
,
@nodes
); }
sub
convertNode {
my
(
$self
,
$doc
,
$xmath
,
$style
) =
@_
;
my
$math
=
$xmath
->parentNode;
my
$tex
=
$self
->extractTeX(
$doc
,
$math
);
if
(!
$tex
) {
Warn(
'imageprocessing'
,
'TeX'
,
undef
,
"No TeX string for math node"
);
return
(); }
my
$type
=
$$self
{imagetype};
my
$key
= (
ref
$self
) .
':'
.
$type
.
':'
.
$tex
;
if
((
$doc
->cacheLookup(
$key
) ||
''
) =~ /^(.*);(\d+);(\d+);(\d+)$/) {
my
(
$image
,
$width
,
$height
,
$depth
) = ($1, $2, $3, $4);
my
$reldest
= pathname_relative(
$image
,
$doc
->getDestinationDirectory);
return
{
processor
=>
$self
,
mimetype
=>
$MIMETYPES
{
$type
},
src
=>
$reldest
,
width
=>
$width
,
height
=>
$height
,
depth
=>
$depth
}; }
else
{
Warn(
'expected'
,
'image'
,
$doc
,
"Couldn't find image for '$key'"
);
return
{}; } }
sub
preamble {
my
(
$self
,
$doc
) =
@_
;
return
<<'EOPreamble';
\def\beginINLINE{\lxBeginImage\(}
\def\endINLINE{\)\lxEndImage\lxShowImage}
% For Display, same as inline, but set displaystyle.
\def\beginDISPLAY{\lxBeginImage\(\displaystyle\the\everydisplay}
\def\endDISPLAY{\)\lxEndImage\lxShowImage}
EOPreamble
}
1;