# -*- mode: Perl -*-
# /=====================================================================\ #
# | pdfTeX | #
# | pdfTeX enhancements Implementation for LaTeXML | #
# |=====================================================================| #
# | Part of LaTeXML: | #
# | Public domain software, produced as part of work done by the | #
# | United States Government & not subject to copyright in the US. | #
# |---------------------------------------------------------------------| #
# | Bruce Miller <bruce.miller@nist.gov> #_# | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Package::Pool;
use strict;
use warnings;
use LaTeXML::Package;
# A rough initial draft of the extra commands & registers defined in pdfTeX.
# See the pdfTeX User's Manual
# Integer Registers
DefRegister('\pdfoutput' => Number(0));
DefRegister('\pdfminorversion' => Number(4));
DefRegister('\pdfcompresslevel' => Number(9));
DefRegister('\pdfobjcompresslevel' => Number(0));
DefRegister('\pdfdecimaldigits' => Number(4));
DefRegister('\pdfimageresolution' => Number(72));
DefRegister('\pdfpkresolution' => Number(0));
DefRegister('\pdftracingfonts' => Number(0));
DefRegister('\pdfuniqueresname' => Number(0));
DefRegister('\pdfadjustspacing' => Number(0));
DefRegister('\pdfprotrudechars' => Number(0));
# \efcode <font> <8bitnumber> => <integer>
# \lpfcode <font> <8bitnumber> => <integer>
# \rpfcode <font> <8bitnumber> => <integer>
DefRegister('\efcode Token Number', Number(0));
DefRegister('\lpcode Token Number', Number(0));
DefRegister('\rpcode Token Number', Number(0));
DefRegister('\pdfforcepagebox' => Number(0));
DefRegister('\pdfoptionalwaysusepdfpagebox' => Number(0));
DefRegister('\pdfinclusionerrorlevel' => Number(0));
DefRegister('\pdfoptionalinclusionerrorlevel' => Number(0));
DefRegister('\pdfimagehicolor' => Number(0));
DefRegister('\pdfimageapplygamma' => Number(0));
DefRegister('\pdfgamma' => Number(0));
DefRegister('\pdfimagegamma' => Number(0));
DefRegister('\pdfdraftmode' => Number(0));
# Dimen Registers
DefRegister('\pdfhorigin' => Dimension('1in'));
DefRegister('\pdfvorigin' => Dimension('1in'));
DefRegister('\pdfpagewidth' => Dimension('0pt'));
DefRegister('\pdfpageheight' => Dimension('0pt'));
DefRegister('\pdflinkmargin' => Dimension('0pt'));
DefRegister('\pdfdestmargin' => Dimension('0pt'));
DefRegister('\pdfthreadmargin' => Dimension('0pt'));
DefRegister('\pdfpxdimen' => Dimension('0pt'));
# Token Registers
DefRegister('\pdfpagesattr' => Tokens());
DefRegister('\pdfpageattr' => Tokens());
DefRegister('\pdfpageresources' => Tokens());
DefRegister('\pdfpkmode' => Tokens());
# Expandable Commands
DefMacro('\pdftexrevision', '');
DefMacro('\pdftexbanner', '');
DefMacro('\pdfcreationdate', '');
DefMacro('\pdfpageref Number', '');
DefMacro('\pdfxformname Number', '');
DefMacro('\pdffontname Token', '');
DefMacro('\pdffontobjnum Token', '');
DefMacro('\pdffontsize Token', '');
DefMacro('\pdfincludechars Token {}', '');
DefMacro('\leftmarginkern Number', '');
DefMacro('\rightmarginkern Number', '');
DefMacro('\pdfescapestring {}', '');
DefMacro('\pdfescapename {}', '');
DefMacro('\pdfescapehex {}', '');
DefMacro('\pdfunescapehex {}', '');
# DefMacro('\ifpdfprimitive {}','');
# DefMacro('\ifpdfabsnum Number','');
# DefMacro('\ifpdfabsdim Dimension','');
DefMacro('\pdfuniformdeviate Number Token', '');
DefMacro('\pdfnormaldeviate Token', '');
DefMacro('\pdfmdfivesum Number {}', '');
DefMacro('\pdffilemoddate {}', '');
# DefMacro('\pdffiledump {}','');
# DefMacro('\pdfcolorstackinit {}','');
# Read-only registers
DefRegister('\pdftexversion' => Number(0));
DefRegister('\pdflastobj' => Number(0));
DefRegister('\pdflastxform' => Number(0));
DefRegister('\pdflastximage' => Number(0));
DefRegister('\pdflastximagepages' => Number(0));
DefRegister('\pdflastannot' => Number(0));
DefRegister('\pdflastlink' => Number(0));
DefRegister('\pdflastxpos' => Number(0));
DefRegister('\pdflastypos' => Number(0));
DefRegister('\pdflastdemerits' => Number(0));
DefRegister('\pdfelapsedtime' => Number(0));
DefRegister('\pdfrandomseed' => Number(0));
DefRegister('\pdfshellescape' => Number(0));
# \pdfximage [ image attr spec ] general text (h, v, m)
# \pdfrefximage object number (h, v, m)
# \pdfannot annot type spec (h, v, m)
# \pdfstartlink [ rule spec ] [ attr spec ] action spec (h, m)
# \pdfendlink (h, m)
# \pdfoutline outline spec (h, v, m)
# \pdfdest dest spec (h, v, m)
# \pdfthread thread spec (h, v, m)
# \pdfstartthread thread spec (v, m)
# \pdfendthread (v, m)
# \pdfsavepos (h, v, m)
# See lxRDFa for ideas how this info might be used!
DefMacro('\pdfinfo{}', '');
# Ugh, what a mess of ugly syntax....
DefParameterType('OpenActionSpecification', sub {
my ($gullet) = @_;
if (my $key = $gullet->readKeyword('openaction')) {
if (my $action = $gullet->readKeyword('user', 'goto')) {
# etc....
} } },
optional => 1, undigested => 1);
DefMacro('\pdfcatalog{} OpenActionSpecification', '');
DefMacro('\pdfnames{}', {});
DefMacro('\pdftrailer{}', {});
DefMacro('\pdfmapfile{}', '');
DefMacro('\pdfmapline{}', '');
# \pdffontattr font general text
# \pdffontexpand font expand spec
# \vadjust [ pre spec ] filler { vertical mode material } (h, m)
DefMacro('\quitvmode', '');
# \pdfliteral [ pdfliteral spec ] general text (h, v, m)
# \special pdfspecial spec
# \pdfresettimer
# \pdfsetrandomseed number
# \pdfnoligatures font
# \pdfprimitive control sequence
# \pdfcolorstack stack number stack action general text
DefMacro('\pdfsetmatrix', '');
DefMacro('\pdfsave', '');
DefMacro('\pdfrestore', '');
# general text → { balanced text }
# attr spec → attr general text
# resources spec → resources general text
# rule spec → ( width | height | depth ) dimension [ rule spec ]
# object type spec → reserveobjnum |
# [ useobjnum number ]
# [ stream [ attr spec ] ] object contents
# annot type spec → reserveobjnum |
# [ useobjnum number ] [ rule spec ] general text
# object contents → file spec | general text
# xform attr spec → [ attr spec ] [ resources spec ]
# image attr spec → [ rule spec ] [ attr spec ] [ page spec ] [ colorspace spec ] [ pdf box spec ]
# outline spec → [ attr spec ] action spec [ count number ] general text
# action spec → user user-action spec | goto goto-action spec |
# thread thread-action spec
# user-action spec → general text
# goto-action spec → numid |
# [ file spec ] nameid |
# [ file spec ] [ page spec ] general text |
# file spec nameid newwindow spec |
# file spec [ page spec ] general text newwindow spec
# thread-action spec → [ file spec ] numid | [ file spec ] nameid
# open-action spec → openaction action spec
# colorspace spec → colorspace number
# pdf box spec → mediabox | cropbox | bleedbox | trimbox | artbox
# map spec → { [ map modifier ] balanced text }
# map modifier → + | = | -
# numid → num number
# nameid → name general text
# newwindow spec → newwindow | nonewwindow
# dest spec → numid dest type | nameid dest type
# dest type → xyz [ zoom number ] | fitr rule spec |
# fitbh | fitbv | fitb | fith | fitv | fit
# thread spec → [ rule spec ] [ attr spec ] id spec
# id spec → numid | nameid
# file spec → file general text
# page spec → page number
# expand spec → stretch shrink step [ autoexpand ]
# stretch → number
# shrink → number
# step → number
# pre spec → pre
# pdfliteral spec → direct | page
# pdfspecial spec → { [ pdfspecial id [ pdfspecial modifier ] ] balanced text }
# pdfspecial id → pdf: | PDF:
# pdfspecial modifier → direct:
# stack action → set | push | pop | current
1;