/* $OpenXM: OpenXM/src/asir-contrib/packages/src/noro_print.rr,v 1.23 2022/03/15 08:00:35 takayama Exp $ */
#include "tags.h"
#define NOT_YET print("It has not yet been implemented.")
extern Taka_png_form_res$
extern AMSTeX$
Taka_png_form_res=150$
def taka_tex_form_top(S,Argv) {
Opt=[];
PrevSymTab = quotetotex_env("symbol_table");
PrevConvFlag = quotetotex_env("conv_rule");
for (I=0; I<length(Argv); I++) {
if (Argv[I][0] == "table") {
quotetotex_env("symbol_table",Argv[I][1]);
quotetotex_env("conv_rule",ior(PrevConvFlag,1));
}else if (Argv[I][0] == "raw") {
Opt=cons(Argv[I],Opt);
}else {
error("Unknown option "+rtostr(Argv[I][0])+" in print_tex_form.");
}
}
Tb = string_to_tb("");
taka_tex_form(S,Tb | option_list=Opt);
Str = tb_to_string(Tb);
quotetotex_env("symbol_table",PrevSymTab);
quotetotex_env("conv_rule",PrevConvFlag);
return Str;
}
def taka_tex_form(S,Tb) {
Raw=0;
Raw=getopt(raw);
if (type(S) == MATRIX) {
taka_tex_form_matrix(S,Tb);
}else if (type(S) == VECTOR) {
taka_tex_form_vector(S,Tb);
}else if (type(S) == LIST) {
taka_tex_form_list(S,Tb);
}else if (taka_is_fractional(S)) {
( taka_tex_form_frac(S,Tb) );
}else if (type(S) == DPOLYNOMIAL) {
taka_tex_form_polynomial(S,Tb);
}else if (type(S) == RPOLYNOMIAL) {
taka_tex_form_polynomial(S,Tb);
}else if (type(S) == NUMBER) {
taka_tex_form_polynomial(S,Tb);
}else if (type(S) == STRUCT) {
taka_tex_form_struct(S,Tb);
}else if (type(S) == QUOTE) {
taka_tex_form_quote(S,Tb);
}else if (type(S) == STRING) {
if (Raw == 1) {
write_to_tb(S,Tb);
}else if (Raw == 2) {
write_to_tb("\\texttt{",Tb);
write_to_tb(osm_verb_tex_form(S),Tb);
write_to_tb("}",Tb);
}else{
write_to_tb("\\verb`",Tb);
write_to_tb(S,Tb);
write_to_tb("`",Tb);
}
}else {
/* How to translate sin to \sin?
Use vtype, get args, ... to print sin.
quote("x+2*y"); there is no way to get the left leaves and right leaves
for now. eval_quote.
*/
write_to_tb(rtostr(S),Tb);
}
}
def taka_tex_form_list(A,Tb) {
N = length(A);
write_to_tb("[",Tb);
for (I=0; I<N; I++) {
taka_tex_form(A[I],Tb);
if (I != N-1) write_to_tb(",",Tb);
}
write_to_tb("]",Tb);
}
def taka_tex_form_polynomial(S,Tb) {
S = objtoquote(S);
S = quotetotex_tb(S,Tb);
}
def taka_tex_form_quote(S,Tb) {
quotetotex_tb(S,Tb);
}
def taka_tex_form_matrix(A,Tb) {
N = size(A)[0];
M = size(A)[1];
write_to_tb(AMSTeX?"\\begin{pmatrix}\n":"\\left(\\begin{array}{",Tb);
if (!AMSTeX) {
for (J=0; J<M; J++) write_to_tb("c",Tb);
write_to_tb("}\n",Tb);
}
for (I=0; I<N; I++) {
for (J=0; J<M; J++) {
taka_tex_form(A[I][J],Tb);
if (J != M-1) write_to_tb("& ",Tb);
}
write_to_tb(AMSTeX?" \\\\\n":" \\\\\n",Tb);
}
write_to_tb(AMSTeX?"\\\end{pmatrix}\n":"\\end{array}\\right)\n",Tb);
}
def taka_tex_form_vector(A,Tb) {
N = size(A)[0];
write_to_tb(AMSTeX?"\\begin{pmatrix}\n":"\\pmatrix{\n",Tb);
for (I=0; I<N; I++) {
taka_tex_form(A[I],Tb);
if (I != N-1) write_to_tb("& ",Tb);
}
write_to_tb(AMSTeX?"\\\\\n\\end{pmatrix}\n":"\\cr}\n",Tb);
}
def taka_is_fractional(A) {
if (type(A) == RATIONAL) return 1;
else if (type(A) == NUMBER && dn(A) != 1) return 1;
else return 0;
}
def taka_tex_form_frac(A,Tb) {
extern Print_tex_form_fraction_format;
if (Print_tex_form_fraction_format == "frac") {
write_to_tb("\\frac{",Tb);
taka_tex_form(nm(A),Tb); write_to_tb("}{",Tb);
taka_tex_form(dn(A),Tb); write_to_tb("}",Tb);
}else if (Print_tex_form_fraction_format == "auto") {
Ntb = string_to_tb(""); taka_tex_form(nm(A),Ntb);
Dtb = string_to_tb(""); taka_tex_form(dn(A),Dtb);
if (str_len(Ntb) > 120 || str_len(Dtb) > 120) {
write_to_tb("(",Tb); write_to_tb(Ntb,Tb); write_to_tb(")/",Tb);
write_to_tb("(",Tb); write_to_tb(Dtb,Tb); write_to_tb(")",Tb);
}else {
write_to_tb("\\frac{",Tb); write_to_tb(Ntb,Tb);
write_to_tb("}{",Tb); write_to_tb(Dtb,Tb); write_to_tb("}",Tb);
}
}else {
write_to_tb("(",Tb); taka_tex_form(nm(A),Tb); write_to_tb(")/",Tb);
write_to_tb("(",Tb); taka_tex_form(dn(A),Tb); write_to_tb(")",Tb);
}
}
/* Tentative */
def taka_tex_form_struct(S,Tb) {
if (struct_type(S) == POLY_FACTORED_POLYNOMIAL ||
struct_type(S) == POLY_FACTORED_RATIONAL) {
taka_poly_tex_form_poly_factored_polynomial(S,Tb);
}
else if (struct_type(S) == POLY_RING) {
taka_poly_tex_form_poly_ring(S,Tb);
}
else if (struct_type(S) == POLY_POLYNOMIAL) {
taka_poly_tex_form_poly_polynomial(S,Tb);
}
else if (struct_type(S) == POLY_IDEAL) {
taka_poly_tex_form_poly_ideal(S,Tb);
}else {
Name = get_struct_name(S);
taka_tex_form(Name,Tb);
write_to_tb("[",Tb);
Elm = get_element_names(S);
for (I=0; I<length(Elm); I++) {
taka_tex_form(Elm[I],Tb);
write_to_tb(" \\rightarrow ",Tb);
T = get_element_at(S,Elm[I]);
taka_tex_form(T,Tb);
if (I != length(Elm)-1) write_to_tb(",",Tb);
}
write_to_tb("]",Tb);
}
}
def taka_output(S) {
shell("rm t.tex ");
output("t.tex");
print(S);
output();
}
def taka_print(S) {
if (type(S) == DPOLYNOMIAL) {
return taka_dp_print(S);
}else{
return rtostr(S);
}
}
def taka_dp_print(F) {
if (F != 0) {
N = size(dp_etov(dp_hm(F)))[0];
Vlist = newvect(N);
for (I=0; I<N; I++) {
Vlist[I] = taka_print_dp_vlist(I);
}
Vlist = vtol(Vlist);
Ans="distributed_polynomial(\" ";
}else{
Ans="0";
}
C = 0;
while (F != 0) {
G = dp_hm(F);
F = dp_rest(F);
if (dp_hc(G)>0 && C != 0) {
Ans += "+";
}
Ans += rtostr(dp_dtop(G,Vlist));
if (C == 0) C = 1;
}
Ans += " \")";
return Ans;
}
def taka_dvi_form(S,Opt) {
if (type(getopt(texstr))>0) {
/* no translation */
}else{
S = taka_tex_form_top(S,Opt);
}
File0 = ox_work_dir()+"/"+ox_new_file_name();
File = File0+".tex";
shell("rm -f "+File);
output(File);
if (!AMSTeX) {
S = "\\documentclass[12pt]{article} \\pagestyle{empty} \\oddsidemargin 0cm \\begin{document}\n"+
"$"+
S + "$ \n \\end{document}\n";
}else{
S = "\\documentclass[12pt]{article} \\usepackage{amsmath} \\usepackage{amssymb} \\pagestyle{empty} \\oddsidemargin 0cm \\begin{document}\n"+
"$"+
S + "$ \n \\end{document}\n";
}
print(S);
output();
shell(" (cd "+ox_work_dir()+" ; latex "+File0+" >>/dev/null) ");
return [File0+".dvi",File0,File,ox_work_dir()];
/* (0) .dvi, (1) no extension, (2) .tex, (3) workding dir */
}
def taka_xdvi_form(S) {
F = taka_dvi_form(S,[] | option_list=getopt());
/* Use xdvi for a moment. */
shell(" xdvi -s 3 -geometry 800x300 "+F[1]+" >>/dev/null & ");
return F;
}
/* test data
print_xdvi_form(quote_sort_polynomial((x-sin(x)*y)^3,[x,y],[1,1]));
*/
def taka_ps_form(S,Opt) {
F = taka_dvi_form(S,Opt);
File0 = F[1];
Work_dir = F[3];
shell(" (cd "+Work_dir+" ; dvips -f "+File0+" >"+File0+".ps ) ");
return [File0+".ps",F[1],F[2],F[3]];
}
/* memo. dvipng should be installed.
Ref. imgtex
dvipng -q -D $res -T tight -M -pp 1 --noghostscript t.dvi -o t%03d.png > /dev/null 2>&1
*/
def taka_png_form3(S) {
F = taka_dvi_form(S,[]);
File0 = F[1];
Work_dir = F[3];
shell(" (cd "+Work_dir+" ; dvipng -q -D "+rtostr(Taka_png_form_res)+
" -T tight -M -pp 1 --noghostscript "+File0+" -o "+File0+".png >/dev/null 2>&1 ) ");
return [File0+".png",F[1],F[2],F[3]];
}
/* memo: pstoimg should be installed from the source code of
latex2html on freebsd. cf. orange:/usr/local/src/latex2*
*/
def taka_png_form(S) {
F = taka_ps_form(S,[]);
File0 = F[1];
File = F[0];
/* BUG: it does not work for now. We need png, too */
shell(" (cd "+Work_dir+" ; pstoimg -type png -crop a -scale 2 "+File0+".ps ) ");
return [File0+".png",F[1],F[2],F[3]];
}
def taka_dvi_form2(S,Opt) {
if (type(getopt(texstr))>0) {
/* no translation */
}else {
S = taka_tex_form_top(S,Opt);
}
File0 = ox_work_dir()+"/"+ox_new_file_name();
File = File0+".tex";
shell("rm -f "+File);
output(File);
S = "\\documentclass[12pt]{article} \\pagestyle{empty} \\begin{document}\n"+
"$"+
S + "$ \n \\end{document}\n";
print(S);
output();
shell(" (cd "+ox_work_dir()+" ; latex "+File0+" >>/dev/null) >/dev/null ");
return [File0+".dvi",File0,File,ox_work_dir()];
/* (0) .dvi, (1) no extension, (2) .tex, (3) workding dir */
}
def taka_ps_form2(S,Opt) {
F = taka_dvi_form2(S,Opt);
File0 = F[1];
Work_dir = F[3];
shell(" (cd "+Work_dir+" ; dvips -f "+File0+" >"+File0+".ps ) > /dev/null 2>&1");
return [File0+".ps",F[1],F[2],F[3]];
}
def taka_png_form2_old(S) {
F = taka_ps_form2(S,[]);
File0 = F[1];
File = F[0];
/* BUG: it does not work for now. We need png, too */
shell(" (cd "+Work_dir+" ; pstoimg -type png -crop a -scale 2 "+File0+".ps ) >/dev/null");
return [taka_input_form(S),File0+".png",F[1],F[2],F[3]];
}
def taka_png_form2(S) {
return cons(taka_input_form(S),taka_png_form3(S));
}
def taka_gif_form(S,Opt) {
F = taka_ps_form(S,Opt);
File0 = F[1];
Work_dir = F[3];
/*
latex2html does not always generate image output for a simple expression.
shell(" (cd "+Work_dir+" ; latex2html -tmp /tmp "+File0+" >>/dev/null) ");
shell(" (cd "+Work_dir+" ; cp "+File0+"/?*.gif "+File0+".gif"+ " ) ");
*/
/* shell(" (cd "+Work_dir+" ; rm -rf "+File0+" ) "); */
shell(" (cd "+Work_dir+" ; pstoimg -type gif -crop a -scale 2 "+File0+".ps >>/dev/null) ");
return [File0+".gif",F[1],F[2],F[3]];
}
def taka_jpeg_form(S) {
F = taka_ps_form(S,[]);
File0 = F[1];
File = F[0];
/* BUG: it does not work for now. We need png, too */
shell(" (cd "+Work_dir+" ; pstoimg -type jpeg -crop a -scale 2 "+File0+".ps ) ");
return [File0+".jpeg",F[1],F[2],F[3]];
}
def taka_xv_form(S,Argv) {
Format = "gif";
Input = 0;
for (I=0; I<length(Argv); I++) {
if (Argv[I][0] == "format") {
Format = Argv[I][1];
}else if (Argv[I][0] == "input") {
Input = Artv[I][1];
}else {
error("Unknown option "+rtostr(Argv[I][0])+" in print_xv_form.");
}
}
if (Input != 0) {
shell(" xv "+Input+" &");
return Input;
}
if (Format == "gif") {
F = taka_gif_form(S,[]);
}else if (Format == "png") {
F = taka_png_form(S);
}else {
error("Unknown format " + rtostr(Format) + " in print_xv_form.");
}
shell(" xv "+F[1]+"."+Format+" &");
return F;
}
def taka_pdf_form(S) {
F=taka_dvi_form(S,[]);
shell(" dvipdfmx "+" -o "+F[1]+".pdf "+F[1]); // +" >>/dev/null & ");
if (type(getopt(nopreview))>0) NoPreview=1;
else NoPreview=0;
if (NoPreview) return append(F,[F[1]+".pdf"]);
if (sysinfo()[0] == "macosx") {
shell("open "+F[1]+".pdf");
}else if (sysinfo()[0] == "windows") {
shell(F[1]+".pdf");
}else {
shell("xdg-open "+F[1]+".pdf");
}
return append(F,[F[1]+".pdf"]);
}
def taka_input_form(S) {
A = 0;
if (type(S) == QUOTE) {
A = quote_input_form(S);
}
else if (type(S) == STRUCT) {
if (struct_type(S) == POLY_FACTORED_POLYNOMIAL) {
A = taka_poly_input_form_poly_factored_polynomial(S);
}else if (struct_type(S) == POLY_FACTORED_RATIONAL) {
A = taka_poly_input_form_poly_factored_rational(S);
}else if (struct_type(S) == POLY_RING) {
A = taka_poly_input_form_poly_ring(S);
}else if (struct_type(S) == POLY_POLYNOMIAL) {
A = taka_poly_input_form_poly_polynomial(S);
}else if (struct_type(S) == POLY_IDEAL) {
A = taka_poly_input_form_poly_ideal(S);
}else {
taka_print_warning("input_form() for this object has not yet been implemented.");
A = rtostr(S);
}
}else if (type(S) == LIST) {
return rtostr(map(taka_input_form,S));
}else if (type(S) == VECTOR) {
return "newvect("+rtostr(length(S))+","+
rtostr(vtol(map(taka_input_form,S)))+")";
}else if (type(S) == MATRIX) {
Iform="newmat("; Size=size(S);
for (I=0; I<length(Size); I++) {
Iform += rtostr(Size[I])+",";
}
Iform += "[";
for (I=0; I<Size[0]; I++) {
Iform += rtostr(vtol(map(taka_input_form,S[I])));
if (I != Size[0]-1) Iform += ",";
}
Iform += "])";
A=Iform;
}else {
A = rtostr(S);
}
return A;
}
def taka_terminal_form(S) {
A = 0;
if (type(S) == QUOTE) {
A = quote_terminal_form(S);
}
else if (type(S) == STRUCT) {
if (struct_type(S) == POLY_FACTORED_POLYNOMIAL) {
A = taka_poly_terminal_form_poly_factored_polynomial(S);
}else if (struct_type(S) == POLY_FACTORED_RATIONAL) {
A = taka_poly_terminal_form_poly_factored_rational(S);
}else if (struct_type(S) == POLY_RING) {
A = taka_poly_terminal_form_poly_ring(S);
}else if (struct_type(S) == POLY_POLYNOMIAL) {
A = taka_poly_terminal_form_poly_polynomial(S);
}else if (struct_type(S) == POLY_IDEAL) {
A = taka_poly_terminal_form_poly_ideal(S);
}else{
error("terminal_form() for this object has not yet been implemented.");
}
}
else if (type(S) == LIST || type(S) == VECTOR || type(S) == MATRIX) {
return rtostr(map(taka_terminal_form,S));
}
else{
A = rtostr(S);
}
return A;
}
/* List of printing functions
cf. def taka_tex_form_quote_list_function(S)
*/
def print_tex_form_topology_open_segment(S) {
T = cdr(S);
A = " [ ";
N = length(T);
for (I=0; I<N; I++) {
A += taka_tex_form_quote_list(T[I]);
if (I != N-1) {
A += ", ";
}
}
A += "]";
return A;
}
def print_tex_form_topology_circle(S) {
T = cdr(S);
A = "S_{";
A += taka_tex_form_quote_list(T[1]);
A += "}(";
A += taka_tex_form_quote_list(T[0]);
A += ")";
N = length(T);
if (N>=3) A+= "(";
for (I=2; I<N; I++) {
A += taka_tex_form_quote_list(T[I]);
if (I != N-1) {
A += ",";
}
}
if (N>=3) A += ")";
return A;
}
/* XML/OpenMath form */
def taka_om_xml_form(R) {
if (type(R) != DPOLYNOMIAL) {
R = quote_new(R);
return taka_xml_basic_form_quote(R);
}else{
return om_xml(R);
}
}
def taka_xml_basic_form_quote(S) {
if (type(S) == LIST) {
A = taka_oma_basic("list");
SS = map(taka_xml_basic_form_quote,S);
for (I=0; I<length(SS); I++) {
A += SS[I];
}
A += taka_end_oma();
return A;
}
S = quotetolist(S);
return taka_xml_basic_form_quote_list(S);
}
def taka_xml_basic_form_quote_list(S) {
if (type(S) != LIST) return taka_xml_basic_form_node_name(S);
A = " ";
if (S[0] == "u_op") {
return taka_xml_basic_form_quote_list_u_op(cdr(S));
}else if (S[0] == "b_op") {
return taka_xml_basic_form_quote_list_b_op(cdr(S));
}else if (S[0] == "t_op") {
return taka_xml_basic_form_quote_list_t_op(cdr(S));
}else if (S[0] == "list") {
return taka_xml_basic_form_quote_list_list(cdr(S));
}else if (S[0] == "exponent_vector") {
return taka_xml_basic_form_quote_list_exponent_vector(cdr(S));
}else if (S[0] == "internal") {
return taka_xml_basic_form_quote_list_internal(cdr(S));
}else if (S[0] == "variable") {
return taka_xml_basic_form_quote_list_variable(cdr(S));
}else if (S[0] == "function") {
return taka_xml_basic_form_quote_list_function(cdr(S));
}else {
error("Unknown quote format.");
}
}
def taka_oma(S,CD) {
return "<oma> "+"<oms name=\""+S+"\" cd=\""+CD+"\"/>";
}
def taka_oma_basic(S) {
return "<oma> "+"<oms name=\""+S+"\" cd=\"basic\"/>";
}
def taka_end_oma() {
return "</oma>";
}
def taka_omv(S) {
return "<omv name=\""+S+"\"/>";
}
def taka_xml_basic_form_quote_list_u_op(S) {
if (S[0] == "()") {
/* Remove ( ) */
A += taka_xml_basic_form_quote_list(S[1]);
}else
if (S[0] == "!") {
A += taka_oma_basic("not");
A += taka_xml_basic_form_quote_list(S[1]);
A += taka_end_oma();
}else
if (S[0] == "@!") {
A += taka_oma_basic("not");
A += taka_xml_basic_form_quote_list(S[1]);
A += taka_end_oma();
}else
if (S[0] == "-") {
A += taka_oma_basic("minus");
A += taka_xml_basic_form_quote_list(S[1]);
A += taka_end_oma();
}else{
error("Not implemented");
}
return A;
}
def taka_xml_basic_form_quote_list_b_op(S) {
if (S[0] == "+") {
T = cdr(S);
N = length(T);
A += taka_oma_basic("plus");
for (I=0; I<N; I++) {
A += taka_xml_basic_form_quote_list(T[I]);
}
A += taka_end_oma();
}else
if (S[0] == "-") {
T = cdr(S);
N = length(T);
A += taka_oma_basic("minus");
for (I=0; I<N; I++) {
if (I == 0 && taka_is_internal_zero(T[I])) {
/* Do not print 0. */
} else {
A += taka_xml_basic_form_quote_list(T[I]);
}
}
A += taka_end_oma();
} else
if (S[0] == "*") {
T = cdr(S);
N = length(T);
A += taka_oma_basic("times");
for (I=0; I<N; I++) {
A += taka_xml_basic_form_quote_list(T[I]);
A += " ";
}
A += taka_end_oma();
} else
if (S[0] == "/") {
T = cdr(S);
A += taka_oma_basic("over");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
} else
if (S[0] == "^") {
T = cdr(S);
A += taka_oma_basic("power");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
} else
if (S[0] == "%") {
T = cdr(S);
A += taka_oma_basic("% (undefined)");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
} else
if (S[0] == "==" || S[0] == "@==") {
T = cdr(S);
A += taka_oma_basic("equal");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == "&&") {
T = cdr(S);
A += taka_oma_basic("and");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == "||") {
T = cdr(S);
A += taka_oma_basic("or");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == "<" || S[0] == "@<") {
T = cdr(S);
A += taka_oma_basic("less");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == ">" || S[0] == "@>") {
T = cdr(S);
A += taka_oma_basic("greater");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == "<=" || S[0] == "@<=") {
T = cdr(S);
A += taka_oma_basic("lessequal");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == ">=" || S[0] == "@>=") {
T = cdr(S);
A += taka_oma_basic("greaterequal");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else
if (S[0] == "!=" || S[0] == "@!=") {
T = cdr(S);
A += taka_oma_basic("unequal");
A += taka_xml_basic_form_quote_list(T[0]);
A += taka_xml_basic_form_quote_list(T[1]);
A += taka_end_oma();
}else {
error("Not implemented.");
}
return A;
}
def taka_xml_basic_form_list_t_op(S) {
NOT_YET ;
}
def taka_xml_basic_form_quote_list_list(S) {
T = S;
A = taka_oma_basic("list");
N = length(T);
for (I=0; I<N; I++) {
A += taka_xml_basic_form_quote_list(T[I]);
if (I != N-1) {
A += ", ";
}
}
A += taka_end_oma();
return A;
}
def taka_xml_basic_form_quote_list_exponent_vector(S) {
NOT_YET;
A = "(";
T = cdr(S);
N = length(T);
for (I=0; I<N; I++) {
A += taka_xml_basic_form_quote_list(T[I]);
if (I != N-1) {
A += ", ";
}
}
A += ")";
return(A);
}
def taka_xml_basic_form_quote_list_function(S) {
if (S[0] == "exponent_vector") {
return taka_xml_basic_form_quote_list_exponent_vector(cdr(S));
}
if (S[0] == "topology_circle") {
return print_xml_basic_form_topology_circle(S);
}else if (S[0] == "topology_open_segment") {
return print_xml_basic_form_topology_open_segment(S);
}else if (taka_is_infix(S[0])) {
/* printing general infix function */
NOT_YET;
A = "(";
T = cdr(S);
N = length(T);
for (I=0; I<N; I++) {
A += "(";
A += taka_xml_basic_form_quote_list(T[I]);
A += ")";
if (I != N-1) {
A += taka_xml_basic_form_node_name(S[0]);
}
}
A += ")";
return(A);
}else {
/* printing general prefix functions. */
TT = taka_xml_basic_form_node_name_cd(S[0]);
A = taka_oma(taka_xml_basic_form_node_name(S[0]),TT);
T = cdr(S);
N = length(T);
for (I=0; I<N; I++) {
A += taka_xml_basic_form_quote_list(T[I]);
}
A += taka_end_oma();
return(A);
}
}
def taka_xml_basic_form_quote_list_internal(S) {
X = car(S);
if (type(X) == RPOLYNOMIAL) {
return taka_omv(taka_xml_basic_symbol(rtostr(X)));
}
if (type(X) == NUMBER && ntype(X) == 0) {
return "<omi>"+rtostr(X)+"</omi>";
}
return rtostr(X);
}
def taka_xml_basic_form_quote_list_variable(S) {
X = car(S);
if (type(X) == STRING) return X;
else return rtostr(X);
}
def taka_xml_basic_form_node_name(S) {
if (type(S) != STRING) return rtostr(S);
/* Table of Mathematical Symbols. */
return taka_xml_basic_symbol(S);
}
def taka_xml_basic_symbol(S) {
/* R = taka_is_indexed(S);
if (R[0]) {
return taka_xml_basic_symbol_(R[1])+"_{"+R[2]+"}";
}
return taka_xml_basic_symbol_(R[1]);
*/
return taka_xml_basic_symbol_(S);
}
def taka_xml_basic_symbol_(S) {
extern Xml_basic_symbol_table;
extern Xml_basic_symbol_table;
N = size(Xml_basic_symbol_table)[0];
/* Linear search for now*/
for (I=0; I<N; I++) {
if (S == Xml_basic_symbol_table[I][0]) {
return Xml_basic_symbol_table[I][1];
}
}
return S;
}
def taka_xml_basic_form_node_name_cd(S) {
extern Xml_basic_symbol_table;
extern Xml_basic_symbol_table;
N = size(Xml_basic_symbol_table)[0];
/* Linear search for now*/
for (I=0; I<N; I++) {
if (S == Xml_basic_symbol_table[I][0]) {
return Xml_basic_symbol_table[I][2];
}
}
return "unknown";
}
def taka_print_output(Obj,F,Mode) {
S = taka_terminal_form(Obj);
if (type(F) != 7) {
error("taka_print_output(Obj, Filename, Mode): Filename must be a string.");
return;
}
if (Mode == "w") {
Fd = open_file(F,"w");
}else {
Fd = open_file(F,"a");
}
if (Fd < 0) {
error("Failed to open the file "+rtostr(F));
return ;
}
S2 = strtoascii(S);
N = length(S2);
for (I=0; I<N; I++) {
put_byte(Fd,S2[I]);
}
close_file(Fd);
}
def taka_print_warning(S) {
extern Taka_print_warning;
if (Taka_print_warning) {
print(S);
}
}
def taka_em(S) {
S1 = asciitostr([0x1b])+"[31m"; /* "[1m" */
S2 = asciitostr([0x1b])+"[0m";
print(S1+rtostr(S)+S2);
}
def noro_print_env(Mode) {
if (Mode==0 || Mode=="default" || Mode=="clear") {
quotetotex_env(0);
load("noro_print_default.rr");
}else if (Mode=="weyl") {
quotetotex_env("conv_rule",7);
quotetotex_env("dp_vars_hweyl",1);
}else if (Mode=="diff_ring") {
quotetotex_env("conv_rule",7);
quotetotex_env("dp_vars_prefix", "\\partial");
}else if (Mode=="yang") {
quotetotex_env("conv_rule",7);
quotetotex_env("dp_vars_prefix", "theta");
}
}
/*
Example.
"\texttt{ "+osm_verb_tex_form("\\sum_{i=1}^n a_i")+" }"
*/
def osm_verb_tex_form(P)
{
L = reverse(strtoascii(rtostr(P)));
for(SS = []; L != []; L = cdr(L)){
Ch = car(L); /* ^~\{} */
if(Ch == 92 || Ch == 94 || Ch == 123 || Ch == 125 || Ch == 126){
SS = append([92,Ch,123,125],SS); /* \Ch{} */
if(Ch != 94 && Ch != 126) /* \char` */
SS = append([92,99,104,97,114,96],SS);
continue;
}
SS = cons(Ch, SS);
if((Ch >= 35 && Ch <= 38) || Ch == 95) /* #$%&_ */
SS = cons(92, SS); /* \Ch */
}
return asciitostr(SS);
}
Loaded_noro_print=1$
end$