# -*- mode: Perl -*-
# /=====================================================================\ #
# | inputenc | #
# | 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> #_# | #
# | http://dlmf.nist.gov/LaTeXML/ (o o) | #
# \=========================================================ooo==U==ooo=/ #
package LaTeXML::Package::Pool;
use strict;
use warnings;
use LaTeXML::Package;
use Encode;
#**********************************************************************
DefPrimitive('\DeclareInputMath {Number} {}', sub {
my ($stomach, $code, $expansion) = @_;
my $char = pack('C', $code->valueOf);
AssignCatcode($char, CC_ACTIVE);
DefMacroI(T_ACTIVE($char), undef, $expansion); });
DefPrimitive('\DeclareInputText {Number} {}', sub {
my ($stomach, $code, $expansion) = @_;
my $char = pack('C', $code->valueOf);
AssignCatcode($char, CC_ACTIVE);
DefMacroI(T_ACTIVE($char), undef, $expansion); });
DefMacro('\IeC{}', '#1');
DefMacroI('\@inpenc@undefined', undef, sub {
Error('unexpected', '<char>', $_[0],
"Keyboard character used is undefined in inputencoding " . LookupValue('INPUT_ENCODING')); });
DefPrimitive('\inputencoding{}', sub { SetInputEncoding(ToString(Expand($_[1]))); });
DeclareOption(undef, sub { SetInputEncoding(ToString(Expand(T_CS('\CurrentOption')))); });
ProcessOptions();
#**********************************************************************
sub SetInputEncoding {
my ($encoding) = @_;
# Initially disable all odd & upper half-plane chars
foreach my $code ((0 .. 8), 0xB, (0xE .. 0x1E), (128 .. 255)) {
my $char = pack('C', $code);
AssignCatcode($char, CC_ACTIVE);
Let(T_ACTIVE($char), '\@inpenc@undefined'); }
AssignValue(PERL_INPUT_ENCODING => undef); # Disable the perl-level decoding, if any.
# Then load TeX's input encoding definitions.
InputDefinitions($encoding, type => 'def', reloadable => 1);
# NOTE: INPUT_ENCODING is never actually used anywhere!
# So, presumably either Perl is magically converting to utf8
# or more likely, treating the bytes as (misinterpreted?) utf8?
# In latter case, perhaps it doesn't matter as long as we end up with the same bytes in/out???
AssignValue(INPUT_ENCODING => $encoding);
DefMacro('\inputencodingname', TokenizeInternal($encoding));
return; }
#**********************************************************************
1;