LaTeXML

 view release on metacpan or  search on metacpan

lib/LaTeXML/Package/eTeX.pool.ltxml  view on Meta::CPAN

    $port = ToString($port);
    if (my $mouth = LookupValue('input_file:' . $port)) {
      my $line_string = ($mouth->readRawLine || '');
      # DG: Can't we do this \endlinechar check in readRawLine ?!
      # DG:  and can't we make it *faster* ?
      if (my $eol = $STATE->lookupDefinition(T_CS('\endlinechar'))) {
        my $eol   = $eol->valueOf()->valueOf;
        my $eolch = (($eol > 0) && ($eol <= 255) ? chr($eol) : undef);
        if ($eolch) {
          $line_string .= $eolch; } }
      else {
        $line_string .= "\r"; }
      DefMacroI($token, undef, Tokens(Explode($line_string))); }
    return; });

DefMacro('\scantokens GeneralText', sub {
    my ($gullet, $generaltext) = @_;
    $gullet->openMouth(LaTeXML::Core::Mouth->new(writableTokens($generaltext)), 0);
    return; });

#======================================================================
# 3.3 Environmental enquiries

our @ETEX_VERSION = (qw(2 .2));
DefMacro('\eTeXrevision', sub { Explode($ETEX_VERSION[1]); });
DefRegister('\eTeXversion' => Number($ETEX_VERSION[0]));

# \currentgrouplevel
DefRegister('\currentgrouplevel', Number(0),
  readonly => 1,
  getter   => sub { $STATE->getFrameDepth; });

# \currentgrouptype returns group types from 0..16 ; but what IS a "group type"?
DefRegister('\currentgrouptype', Number(0), readonly => 1);

# \ifcsname stuff \endcsname
DefConditional('\ifcsname CSName', sub { defined LookupMeaning($_[1]); });

# \ifdefined <token>
DefConditional('\ifdefined Token', sub { defined LookupMeaning($_[1]); });

# ???
DefRegister('\lastnodetype', Number(0));

#======================================================================
# 3.4 Generalization of the \mark concept: a class of \marks
# but since we don't manage Pages...

DefPrimitive('\marks Number GeneralText', undef);
DefMacroI('\topmarks Number',        undef, Tokens());
DefMacroI('\firstmarks Number',      undef, Tokens());
DefMacroI('\botmarks Number',        undef, Tokens());
DefMacroI('\splitfirstmarks Number', undef, Tokens());
DefMacroI('\splitbotmarks Number',   undef, Tokens());

#======================================================================
# 3.5 Bi-directional typesetting: the TeX--XeT primitives

# Should these simply ouput some unicode direction changers,
# [Things like:
#  202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
#  202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
#  202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
#  202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
#  202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
# ]
# or do we need to do some more intelligent tracking of modes
# and directionality?
# Presumably we can't rely on the material itself being directional.

# By leaving this 0, we're saying "Don't use these features"!
DefRegister('\TeXXeTstate' => Number(0));

DefMacroI('\beginL', undef, '');
DefMacroI('\beginR', undef, '');
DefMacroI('\endL',   undef, '');
DefMacroI('\endR',   undef, '');

DefRegister('\predisplaydirection' => Number(0));    # ???

#======================================================================
# 3.6 Additional debugging features
DefRegister('\interactionmode' => Number(0));

# Should show all open groups & their type.
DefPrimitive('\showgroups', undef);

# \showtokens <generaltext>
DefPrimitive('\showtokens GeneralText', sub {
    Note("> " . writableTokens($_[1]));
    Note($_[0]->getLocator->toString());
    return; });

DefRegister('\tracingassigns'    => Number(0));    # ???
DefRegister('\tracinggroups'     => Number(0));
DefRegister('\tracingifs'        => Number(0));    # ???
DefRegister('\tracingscantokens' => Number(0));
DefRegister('\tracingnesting'    => Number(0));
DefRegister('\savingvdiscards'   => Number(0));
DefRegister('\savinghyphcodes'   => Number(0));
#======================================================================
# 3.7 Miscellaneous primitives

# \everyeof
# NOTE: These tokens are NOT used anywhere (yet?)
DefRegister('\everyeof', Tokens());

DefConstructor('\middle Token', '#1',
  afterConstruct => sub {
    my ($document) = @_;
    my $current    = $document->getNode;
    my $delim      = $document->getLastChildElement($current) || $current;
    $document->setAttribute($delim, role     => 'MIDDLE');
    $document->setAttribute($delim, stretchy => 'true');
    return; });

# \unless someif
DefConditional('\unless Token', sub {
    my ($gullet, $if) = @_;
    my ($defn, $test);
    if (($defn = LookupDefinition($if)) && (($$defn{conditional_type} || '') eq 'if')
      && ($test = $defn->getTest)) {



( run in 0.828 second using v1.01-cache-2.11-cpan-71847e10f99 )