LaTeXML
view release on metacpan or search on metacpan
lib/LaTeXML/Package/pstricks.sty.ltxml view on Meta::CPAN
# -*- mode: Perl -*-
# /=====================================================================\ #
# | pst-grad.sty | #
# | 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. | #
# |---------------------------------------------------------------------| #
# | Thanks to Ioan Alexandru Sucan <i.sucan@iu-bremen.de> | #
# | of the arXMLiv group for initial implementation | #
# | http://arxmliv.kwarc.info/ | #
# | Released to the Public Domain | #
# |---------------------------------------------------------------------| #
# | Bruce Miller <bruce.miller@nist.gov> #_# | #
# | http://dlmf.nist.gov/LaTeXML/ (o o) | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Package::Pool;
use strict;
use warnings;
use LaTeXML::Package;
use LaTeXML::Util::Transform;
use LaTeXML::Util::Geometry;
# Implementation of the pstricks package. (incomplete)
# missing: \psgrid is missing most attributes
# shadow, doubleline and border support
# some special attributes for arrows
# fillstyle is assumed solid or none
# \pscustom and its special commands (chapters 20, 21, 22)
# \SpecialCoor is not supported
# overlays are not supported
# special box commands (Help part A, ...)
RequirePackage('xcolor');
##############################################################
## Parameter type definitions
##############################################################
DefParameterType('Float', sub { $_[0]->readFloat; });
sub ReadPSDimension {
my ($gullet, $scale) = @_;
$scale = LookupRegister('\psunit') unless $scale;
my $s = $gullet->readOptionalSigns;
if (defined(my $d = $gullet->readRegisterValue('Dimension', $s, 1))) {
return $d; }
elsif (defined($d = $gullet->readFloat)) {
if (my $unit = $gullet->readUnit) {
return Dimension($s * $d->valueOf * $unit); }
else {
return $scale->multiply($s * $d->valueOf); } }
else {
Warn('expected', '<number>', $gullet, "Missing number, treated as zero.");
return Dimension(0); } }
sub b_reversion {
my ($box) = @_;
return $box ? (T_BEGIN, Revert($box), T_END) : (); }
# reads {PSDimension} and does not complain if argument is missing
sub ReadBracketedPSDimension {
my ($gullet) = @_;
$gullet->skipSpaces;
if ($gullet->ifNext(T_BEGIN)) {
$gullet->readToken; $gullet->skipSpaces;
my $r = ReadPSDimension($gullet);
$gullet->skipSpaces; $gullet->readToken;
return $r; }
else {
return; } }
DefParameterType('BracketedPSDimension', \&ReadBracketedPSDimension,
reversion => \&b_reversion, optional => 1);
# reads {} and does not complain if argument is missing
sub ReadOptionalBracketed {
my ($gullet, $itemtype) = @_;
$gullet->skipSpaces;
if ($gullet->ifNext(T_BEGIN)) {
my $itemreader;
if (!$itemtype) { $itemreader = sub { scalar($gullet->readBalanced); }; }
else { $itemreader = ResolveReader($itemtype); }
if (!$itemreader) {
Error('misdefined', $itemtype, $gullet,
"Can't find reader for optional curly-bracketed argument from '$itemtype'"); }
$gullet->readToken; $gullet->skipSpaces;
my $item = &$itemreader($gullet);
$gullet->skipSpaces;
$gullet->readToken if $gullet->ifNext(T_END);
return $item; }
else {
( run in 1.372 second using v1.01-cache-2.11-cpan-f56aa216473 )