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 )