/usr/share/perl5/LaTeXML/Common/Dimension.pm is in latexml 0.8.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | # /=====================================================================\ #
# | LaTeXML::Common::Dimension | #
# | Representation of Dimensions | #
# |=====================================================================| #
# | 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> #_# | #
# | http://dlmf.nist.gov/LaTeXML/ (o o) | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Common::Dimension;
use strict;
use warnings;
use LaTeXML::Global;
use LaTeXML::Common::Object;
use base qw(LaTeXML::Common::Number);
use base qw(Exporter);
our @EXPORT = (qw(&Dimension));
#======================================================================
# Exported constructor.
sub Dimension {
my ($scaledpoints) = @_;
return LaTeXML::Common::Dimension->new($scaledpoints); }
#======================================================================
sub new {
my ($class, $sp) = @_;
$sp = "0" unless $sp;
if ($sp =~ /^(-?\d*\.?\d*)([a-zA-Z][a-zA-Z])$/) { # Dimensions given.
$sp = $1 * $STATE->convertUnit($2); }
return bless [$sp || "0"], $class; }
sub toString {
my ($self) = @_;
return pointformat($$self[0]); }
sub toAttribute {
my ($self) = @_;
return attributeformat($$self[0]); }
sub stringify {
my ($self) = @_;
return "Dimension[" . $$self[0] . "]"; }
# Utility for formatting scaled points sanely.
sub pointformat {
my ($sp) = @_;
# As much as I'd like to make this more friendly & readable
# there's TeX code that depends on getting enough precision
# If you use %.5f, tikz (for example) will sometimes hang trying to do arithmetic!
# But see toAttribute for friendlier forms....
my $s = sprintf("%.6f", ($sp / 65536));
$s =~ s/0+$// if $s =~ /\./;
# $s =~ s/\.$//;
$s =~ s/\.$/.0/; # Seems TeX prints .0 which in odd corner cases, people use?
return $s . 'pt'; }
# When saved in an attribute, however, we can afford to lose
# a lot of useless precision. Keeping only 1 decimal; do we even need that?
sub attributeformat {
my ($sp) = @_;
my $s = sprintf("%.1f", ($sp / 65536));
$s =~ s/0+$// if $s =~ /\./;
# $s =~ s/\.$//;
$s =~ s/\.$/.0/;
return $s . 'pt'; }
#======================================================================
1;
__END__
=pod
=head1 NAME
C<LaTeXML::Common::Dimension> - representation of dimensions;
extends L<LaTeXML::Common::Number>.
=head2 Exported functions
=over 4
=item C<< $dimension = Dimension($dim); >>
Creates a Dimension object. C<$num> can be a string with the number and units
(with any of the usual TeX recognized units), or just a number standing for
scaled points (sp).
=back
=head1 AUTHOR
Bruce Miller <bruce.miller@nist.gov>
=head1 COPYRIGHT
Public domain software, produced as part of work done by the
United States Government & not subject to copyright in the US.
=cut
|