OutputForm was designed so that operators are Symbol-s and
dealing with operators should use opearations from Symbol.
fmt.spad essentially treated operators as strings (they were
immediately converted to strings and resto of code used
string operations). The attached patch replaces strings
by symbols, alt least in places that I found.
--
Waldek Hebisch
--
You received this message because you are subscribed to the Google Groups
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to fricas-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/fricas-devel/ZkDL0Mt9aAzI5Myl%40fricas.org.
diff --git a/src/algebra/fmt.spad b/src/algebra/fmt.spad
index 25db609f..937cc88f 100644
--- a/src/algebra/fmt.spad
+++ b/src/algebra/fmt.spad
@@ -325,7 +325,7 @@ OutputBox : Exports == Implementation where
++ the name of that operator.
OperatorHandlers(HANDLER: Type): Exports == Implementation where
Z ==> Integer
- S ==> String
+ S ==> Symbol
Exports == with
new: () -> %
++ \spad{new()} creates an empty structure of handlers.
@@ -419,6 +419,7 @@ FormatterCategory: Category == Exports where
Z ==> Integer
N ==> NonNegativeInteger
S ==> String
+ Sy ==> Symbol
LE ==> List E
BOX ==> OutputBox
LBOX ==> S -> BOX -- Label box for prologue and epilogue
@@ -1330,8 +1331,8 @@ of a \spad{ROW} operator without the wrapping \spad{MATRIX} operator.
opex: E := operator a2
not symbol? opex => -1 -- error "second argument no symbol"
-o2 := string symbol opex
-o2 ~= "PAREN" => -1 -- error "second argument no PAREN"
+o2 := symbol(opex)
+o2 ~= 'PAREN => -1 -- error "second argument no PAREN"
#(aa2 := arguments a2) > 1 => -1 -- error "second argument too long"
@@ -1375,8 +1376,8 @@ of a \spad{ROW} operator without the wrapping \spad{MATRIX} operator.
formatInteger(n: Z): BOX == box convert n
formatFloat(s: String): BOX == box s
formatString(s: S): BOX == box s
-formatSymbol(s: S): BOX == box s
-formatFunctionSymbol(s: S): BOX == box s
+formatSymbol(s : S): BOX == box(s)
+formatFunctionSymbol(s: S): BOX == box(s)
formatFunction(b: BOX, args: LE): BOX ==
m: Z := minPrecedence()
a: BOX := nary(", ", maxPrecedence(), formatExpression m)(m, args)
@@ -1398,10 +1399,10 @@ of a \spad{ROW} operator without the wrapping \spad{MATRIX} operator.
not symbol? expr => box "[[BAD OUTPUTFORM]]"
-- We've got a symbol here.
-- We are in the nullary case.
-str: S := string symbol expr
-knownHandler?(operatorData, 0, str) =>
-handler(operatorData, 0, str)(prec, empty()$LE)
-formatSymbol str
+sy : Sy := symbol expr
+knownHandler?(operatorData, 0, sy) =>
+handler(operatorData, 0, sy)(prec, empty()$LE)
+formatSymbol(string(sy))
-- now we take apart a list
opex: E := operator expr
@@ -1410,7 +1411,7 @@ of a \spad{ROW} operator without the wrapping \spad{MATRIX} operator.
formatFunction(formatExpression(opex, minPrecedence()), args)
nargs: Z := #args
-op: S := string symbol opex
+op : Sy := symbol(opex)
knownHandler?(operatorData, nargs, op) =>
handler(operatorData, nargs, op)(prec, args)
@@ -1421,7 +1422,7 @@ of a \spad{ROW} operator without the wrapping \spad{MATRIX} operator.
-- We format as a function with function name op and argument
-- give by args.
-formatFunction(formatFunctionSymbol op, args)
+formatFunction(formatFunctionSymbol(string(op)), args)
formatExpression(expr: E): BOX == formatExpression(expr, minPrecedence())
diff --git a/src/algebra/fmt1d.spad b/src/algebra/fmt1d.spad
index d0a1c17d..140e730a 100644
--- a/src/algebra/fmt1d.spad
+++ b/src/algebra/fmt1d.spad
@@ -371,7 +371,7 @@ data structure.
PAREN p ==> bracket("(", ")", FE p)
PAREN2(p1, p2) ==> bracket("(", ")", infix(", ", MAX, FE MIN, FE MIN))
-o(n, op, hdl) ==> setHandler!(oh, n, op, hdl)
+o(n, op, hdl) ==> setHandler!(oh, n, op::Symbol, hdl)
o(0, "NOTHING", nothing())
o(0, "%pi", formatConstant "%pi")
diff --git a/src/algebra/fmt2d.spad b/src/algebra/fmt2d.spad
index 72102380..2f4ac719 100644
--- a/src/algebra/fmt2d.spad
+++ b/src/algebra/fmt2d.spad
@@ -453,7 +453,7 @@ data structure.
PAREN p ==> bracket("(", ")", FE p)
PAREN2(p1, p2) ==> bracket("(", ")", infix(", ", MAX, FE MIN, FE MIN))
-o(n, op, hdl) ==> setHandler!(oh, n, op, hdl)
+o(n, op, hdl) ==> setHandler!(oh, n, op::Symbol, hdl)
o(0, "NOTHING", nothing())
o(0, "%pi", formatConstant "%pi")
diff --git a/src/al