Except ∖adcode, the commands of the aldordoc user interface that are not
directly implemented in aldordoc.sty.nw are called interface-only commands.
Their corresponding implemented counterparts are listed in Section 25.4.
These commands are
and they will be translated into
with appropriate parameters.
There can be several interface-only commands on one line. We treat them one after
the other by calling the actual translation routine adtranslateInterfaceOnlyCommand.
The function works roughly as follows. It loops over the given string as long as it
finds occurrences of interface-only commands. If such a command is found, the
text before the command is fed to the (escape) function that was given as
the second parameter. The interface-only command itself is handed over to
adtranslateInterfaceOnlyCommand which returns the translated command together
with the remaining text that come after this command.
303⟨adtranslateInterfaceOnlyCommands 303⟩≡ (326)
sub adtranslateInterfaceOnlyCommands {
my ($str, $escape, @escargs) = @_;
my ($ret, $translated) = (’’, ’’);
while ($str=~/(\\ad(parameter|(define)?name))/) {
$ret .= &{$escape}($‘, @escargs);
$str = "$1$’";
($translated, $str) = &adtranslateInterfaceOnlyCommand($str);
$ret .= $translated;
}
$ret .= &{$escape}($str, @escargs);
return $ret;
}
Defines:
adtranslateInterfaceOnlyCommands, used in chunk 300.
Uses adtranslateInterfaceOnlyCommand 304.
The actual translation routine is listed below. It takes as input a string
that must start with one of the interface-only commands. In fact, \ad must
be the first three characters. An optional type parameter that matches
ConstructorNameRegularExpression is copied without modification for ∖adname and
∖addefinename. The actual argument has the form
where the SIGNATURE part is allowed to be missing for ∖adname.
ToDo ⊲ 15 ⊳ The
existence of the signature part is not checked.
304⟨adtranslateInterfaceOnlyCommand 304⟩≡ (326)
sub adtranslateInterfaceOnlyCommand {
my ($str) = @_;
my ($ret) = ’’;
my ($b, $o, $type, $name, $c);
my ($indexkey, $indextext);
my ($hyperlabelname, $hyperlabelsignature);
my ($latextext, $signature);
my ($texcommand);
if ($str=~/^\\ad(parameter|(define)?name(\[⟨constructor name regular expression 313⟩\])?){/) {
$texcommand = $1;
$str = "{$’"; # must copy {
($b, $o, $name, $c, $str) = &splitBalancedParentheses($str,’{’,’}’);
($indexkey, $indextext,
$hyperlabelname, $hyperlabelsignature,
$latextext, $signature) = &splitNameAndSignatureArgument($name);
if ($texcommand =~ /^name/) {$ret = ’use’;} #\adinternalusename
$ret = ’\adinternal’ . $ret . $texcommand;
if ($texcommand eq ’parameter’) {
$ret .= "{$latextext}{" . &escapeForTTLatex($signature) . "}";
} else {
$ret .= "{$indexkey}{$indextext}"
. "{$hyperlabelname}{$hyperlabelsignature}"
. "{$latextext}";
}
} else {
print STDERR "ERROR: adtranslateInterfaceOnlyCommand: " .
"No interface-only command found.\n";
print STDERR "Current line is:\n";
print STDERR "$str\n";
die "";
}
return ($ret, $str);
}
Defines:
adtranslateInterfaceOnlyCommand, used in chunks 303 and 314.
Uses escapeForTTLatex 325, splitBalancedParentheses 317,
and splitNameAndSignatureArgument 321.