diff -r -c -C 5 maxima-5.9.0rc3_orig/doc/info/Input.texi maxima-5.9.0rc3/doc/info/Input.texi
*** maxima-5.9.0rc3_orig/doc/info/Input.texi	Sat Mar 30 06:49:22 2002
--- maxima-5.9.0rc3/doc/info/Input.texi	Sun Jan  5 17:17:20 2003
***************
*** 682,691 ****
--- 682,733 ----
  the LOADFILE command is used; 'AUTOLOAD means print only when a file
  is automatically loaded in (e.g. the integration file SIN FASL); FALSE
  means never print the loading message.
  
  @end defvar
+ @defun MATHML (expr)
+ @defunx MATHML (expr,filename)
+ @defunx MATHML (label,filename)
+ 
+ Convert an expression to Presentation MathML (v2).
+ 
+ In the case of a label,
+ an equation-number will be produced.
+ in case a file-name is supplied, the output will be appended to the
+ file.
+ 
+ @example
+ (C1) integrate(1/(1+x^3),x);
+ 
+ 					 2 x - 1
+ 		       2	    ATAN(-------)
+ 		  LOG(x  - x + 1)	 SQRT(3)    LOG(x + 1)
+ (D1) 	        - --------------- + ------------- + ----------
+ 			 6	       SQRT(3)	        3
+ (C2) mathml(d1);
+ 
+ (D2) 				     (D1)
+ (C6) mathml(integrate(sin(x),x));
+ 
+ (D6) 				     FALSE
+ (C7) mathml(d1,"/tmp/jo.xml");
+ (D7) 				     (D1)
+ @end example
+ where the last expression will be appended to the file @file{/tmp/jo.xml}
+ @end defun
  @c @node NOSTRING, OBASE, LOADPRINT, Input and Output
  @c @unnumberedsec phony
  @defun NOSTRING (arg)
  displays all input lines when playing back rather than
  STRINGing them.  If arg is GRIND then the display will be in a more
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/Makefile.am maxima-5.9.0rc3/src/Makefile.am
*** maxima-5.9.0rc3_orig/src/Makefile.am	Sun Oct 27 21:16:27 2002
--- maxima-5.9.0rc3/src/Makefile.am	Fri Nov 29 16:58:31 2002
***************
*** 191,200 ****
--- 191,201 ----
  macsys.lisp \
  mactex.lisp \
  marray.lisp \
  mat.lisp \
  matcom.lisp \
+ mathml.lisp \
  matrix.lisp \
  matrun.lisp \
  max_ext.lisp \
  maxima-package.lisp \
  maxmac.lisp \
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/Makefile.in maxima-5.9.0rc3/src/Makefile.in
*** maxima-5.9.0rc3_orig/src/Makefile.in	Tue Oct 29 22:06:15 2002
--- maxima-5.9.0rc3/src/Makefile.in	Fri Nov 29 17:01:00 2002
***************
*** 159,168 ****
--- 159,169 ----
  macsys.lisp \
  mactex.lisp \
  marray.lisp \
  mat.lisp \
  matcom.lisp \
+ mathml.lisp \
  matrix.lisp \
  matrun.lisp \
  max_ext.lisp \
  maxima-package.lisp \
  maxmac.lisp \
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/clisp-depends.mk maxima-5.9.0rc3/src/clisp-depends.mk
*** maxima-5.9.0rc3_orig/src/clisp-depends.mk	Sun Oct 27 19:49:39 2002
--- maxima-5.9.0rc3/src/clisp-depends.mk	Fri Nov 29 17:01:00 2002
***************
*** 238,247 ****
--- 238,248 ----
  binary-clisp/maxima.mem : invert.lisp
  binary-clisp/maxima.mem : hypgeo.lisp
  binary-clisp/maxima.mem : hyp.lisp
  binary-clisp/maxima.mem : todd-coxeter.lisp
  binary-clisp/maxima.mem : mactex.lisp
+ binary-clisp/maxima.mem : mathml.lisp
  binary-clisp/maxima.mem : plot.lisp
  binary-clisp/maxima.mem : autol.lisp
  binary-clisp/maxima.mem : max_ext.lisp
  binary-clisp/maxima.mem : autoconf-variables.lisp
  binary-clisp/maxima.mem : init-cl.lisp
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/cmucl-depends.mk maxima-5.9.0rc3/src/cmucl-depends.mk
*** maxima-5.9.0rc3_orig/src/cmucl-depends.mk	Sun Oct 27 19:49:37 2002
--- maxima-5.9.0rc3/src/cmucl-depends.mk	Fri Nov 29 16:57:24 2002
***************
*** 238,247 ****
--- 238,248 ----
  binary-cmucl/maxima.core : invert.lisp
  binary-cmucl/maxima.core : hypgeo.lisp
  binary-cmucl/maxima.core : hyp.lisp
  binary-cmucl/maxima.core : todd-coxeter.lisp
  binary-cmucl/maxima.core : mactex.lisp
+ binary-cmucl/maxima.core : mathml.lisp
  binary-cmucl/maxima.core : plot.lisp
  binary-cmucl/maxima.core : autol.lisp
  binary-cmucl/maxima.core : max_ext.lisp
  binary-cmucl/maxima.core : autoconf-variables.lisp
  binary-cmucl/maxima.core : init-cl.lisp
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/gcl-depends.mk maxima-5.9.0rc3/src/gcl-depends.mk
*** maxima-5.9.0rc3_orig/src/gcl-depends.mk	Sun Oct 27 19:49:31 2002
--- maxima-5.9.0rc3/src/gcl-depends.mk	Fri Nov 29 16:57:11 2002
***************
*** 237,246 ****
--- 237,247 ----
  binary-gcl/maxima : invert.lisp
  binary-gcl/maxima : hypgeo.lisp
  binary-gcl/maxima : hyp.lisp
  binary-gcl/maxima : todd-coxeter.lisp
  binary-gcl/maxima : mactex.lisp
+ binary-gcl/maxima : mathml.lisp
  binary-gcl/maxima : plot.lisp
  binary-gcl/maxima : autol.lisp
  binary-gcl/maxima : max_ext.lisp
  binary-gcl/maxima : autoconf-variables.lisp
  binary-gcl/maxima : init-cl.lisp
Only in maxima-5.9.0rc3/src: mathml.lisp
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/max_ext.lisp maxima-5.9.0rc3/src/max_ext.lisp
*** maxima-5.9.0rc3_orig/src/max_ext.lisp	Mon Sep 23 23:32:55 2002
--- maxima-5.9.0rc3/src/max_ext.lisp	Fri Nov 29 17:00:52 2002
***************
*** 1,9 ****
--- 1,10 ----
  ;;Autoloads for maxima
  (in-package "MAXIMA")
  
  (AUTO-MSPEC '$TEX '|mactex|)
+ (AUTO-MSPEC '$MATHML '|mathml|)
  (AUTOF '$FUNCSOL '|nusum|)
  ;(AUTOF '$NUSUML '|nusum|)
  (AUTOF '$RFORM '|nusum|)
  ;(AUTOF '$RFORN '|nusum|)
  ;(AUTOF '$PRODSHIFT '|nusum|)
diff -r -c -C 5 maxima-5.9.0rc3_orig/src/maxima.system maxima-5.9.0rc3/src/maxima.system
*** maxima-5.9.0rc3_orig/src/maxima.system	Tue Oct 22 23:52:03 2002
--- maxima-5.9.0rc3/src/maxima.system	Fri Nov 29 17:00:19 2002
***************
*** 397,406 ****
--- 397,407 ----
  			 (:file "invert")
  			 (:file "hypgeo")
  			 (:file "hyp")
  			 (:file "todd-coxeter")
  			 (:file "mactex")
+ 			 (:file "mathml")
  			 (:file "plot")))
  	       (:module final :source-pathname ""
  			;; These are not compiled, for whatever reason
  			:load-only t
  			:components ((:file "autol")
Only in maxima-5.9.0rc3/tests: mathml_ref_list
Only in maxima-5.9.0rc3/tests: mathmltest
diff -r -c -C 5 maxima-5.9.0rc3_orig/tests/rtest11.mac maxima-5.9.0rc3/tests/rtest11.mac
*** maxima-5.9.0rc3_orig/tests/rtest11.mac	Mon May  8 07:09:42 2000
--- maxima-5.9.0rc3/tests/rtest11.mac	Sat Jan  4 11:14:58 2003
***************
*** 23,37 ****
  EXP2:diff(EXP1,X);
  1/(3*((2*X-2^(1/3))^2/(3*2^(2/3))+1))-(2*X-2^(1/3))
                                 /(6*2^(2/3)*(X^2-2^(1/3)*X+2^(2/3)))
                                +1/(3*2^(2/3)*(X+2^(1/3)))$  
  				
! /* was 1/(3*((2*2^(2/3)*X-2)^2/12+1))-2^(1/3)*(2*2^(2/3)*X-2)
! 			       /(12*(2^(2/3)*X^2-2*X+2*2^(1/3)))
! 			      +2^(1/3)/(6*(X+2^(1/3)))$
! 				which is equal
! */				
  radcan(EXP2);
  1/(X^3+2)$
  reveal(EXP1:-LOG(X^2-2^(1/3)*X+2^(2/3))/(6*2^(2/3))+ATAN((2*X-2^(1/3))/(2^(1/3)*SQRT(3)))
  					/(2^(2/3)*SQRT(3))
  				       +LOG(X+2^(1/3))/(3*2^(2/3)),2);
--- 23,36 ----
  EXP2:diff(EXP1,X);
  1/(3*((2*X-2^(1/3))^2/(3*2^(2/3))+1))-(2*X-2^(1/3))
                                 /(6*2^(2/3)*(X^2-2^(1/3)*X+2^(2/3)))
                                +1/(3*2^(2/3)*(X+2^(1/3)))$  
  				
! /* was 1/(3*((2*2^(2/3)*X-2)^2/12+1))-2^(1/3)*(2*2^(2/3)*X-2) */
! /* 			       /(12*(2^(2/3)*X^2-2*X+2*2^(1/3))) */
! /* 			      +2^(1/3)/(6*(X+2^(1/3)))$ */
! /* 				which is equal */
  radcan(EXP2);
  1/(X^3+2)$
  reveal(EXP1:-LOG(X^2-2^(1/3)*X+2^(2/3))/(6*2^(2/3))+ATAN((2*X-2^(1/3))/(2^(1/3)*SQRT(3)))
  					/(2^(2/3)*SQRT(3))
  				       +LOG(X+2^(1/3))/(3*2^(2/3)),2);
diff -r -c -C 5 maxima-5.9.0rc3_orig/tests/rtest13.mac maxima-5.9.0rc3/tests/rtest13.mac
*** maxima-5.9.0rc3_orig/tests/rtest13.mac	Mon May  8 07:09:42 2000
--- maxima-5.9.0rc3/tests/rtest13.mac	Sat Jan  4 11:13:49 2003
***************
*** 50,87 ****
  'DIFF(G(X),X,2) = 'DIFF(F(X),X,1)-COS(X)$
  ATVALUE('DIFF(G(X),X),X = 0,A);
  A$
  ATVALUE(F(X),X = 0,1);
  1$
! /* The matchfix stuff seems to work but is difficult for batch to parse and check
!  MATCHFIX("{","}");
! "{"$
! INFIX("|");
! "|"$
! EXP1:{X | X > 0};
! {X | X > 0}$
! EXP2:{X | X < 2};
! {X | X < 2}$
! INFIX("OU");
! OU$
! INFIX("OI");
! OI$
! EXP1 OU EXP2;
! {X | X > 0} OU {X | X < 2}$
! EXP1 OU EXP2;
! {X | X > 0} OU {X | X < 2}$
! EXP1:{1,2,3};
! {1,2,3}$
! {3,4,5};
! {3,4,5}$
! EXP1 OU EXP1 OU %;
! {1,2,3} OU {1,2,3} OU {3,4,5}$
! INFIX("ou",100,100);
! OU$
! EXP2:INFIX("OI",120,120);
! OI$
! EXP1 OU EXP1 OU %;
! {1,2,3} OU {1,2,3} OU OI$
! REMOVE("ou",OPERATOR);
! DONE$
! ERRCATCH(EXP1 OU EXP2);
! [{1,2,3} OU OI]$  */
--- 50,87 ----
  'DIFF(G(X),X,2) = 'DIFF(F(X),X,1)-COS(X)$
  ATVALUE('DIFF(G(X),X),X = 0,A);
  A$
  ATVALUE(F(X),X = 0,1);
  1$
! /* The matchfix stuff seems to work but is difficult for batch to parse and check */
! /* MATCHFIX("{","}"); */
! /* "{"$ */
! /* INFIX("|"); */
! /* "|"$ */
! /* EXP1:{X | X > 0}; */
! /* {X | X > 0}$ */
! /* EXP2:{X | X < 2}; */
! /* {X | X < 2}$ */
! /* INFIX("OU"); */
! /* OU$ */
! /* INFIX("OI"); */
! /* OI$ */
! /* EXP1 OU EXP2; */
! /* {X | X > 0} OU {X | X < 2}$ */
! /* EXP1 OU EXP2; */
! /* {X | X > 0} OU {X | X < 2}$ */
! /* EXP1:{1,2,3}; */
! /* {1,2,3}$ */
! /* {3,4,5}; */
! /* {3,4,5}$ */
! /* EXP1 OU EXP1 OU %; */
! /* {1,2,3} OU {1,2,3} OU {3,4,5}$ */
! /* INFIX("ou",100,100); */
! /* OU$ */
! /* EXP2:INFIX("OI",120,120); */
! /* OI$ */
! /* EXP1 OU EXP1 OU %; */
! /* {1,2,3} OU {1,2,3} OU OI$ */
! /* REMOVE("ou",OPERATOR); */
! /* DONE$ */
! /* ERRCATCH(EXP1 OU EXP2); */
! /* [{1,2,3} OU OI]$  */ 
\ No newline at end of file
diff -r -c -C 5 maxima-5.9.0rc3_orig/tests/rtest9a.mac maxima-5.9.0rc3/tests/rtest9a.mac
*** maxima-5.9.0rc3_orig/tests/rtest9a.mac	Mon May  8 07:09:42 2000
--- maxima-5.9.0rc3/tests/rtest9a.mac	Sat Jan  4 11:17:05 2003
***************
*** 29,41 ****
  SIN(X+(O+1/2)*%PI);
  -COS(X)$
  (linel:500,DIFF(EXP(X^2+Y)/(X+Y),X,2));
  4*X^2*%E^(Y+X^2)/(Y+X)+2*%E^(Y+X^2)/(Y+X)-4*X*%E^(Y+X^2)/(Y+X)^2
  		      +2*%E^(Y+X^2)/(Y+X)^3$
! /* we use sconcat here, because it is not possible to compare the
!   output from optimize which involves gensyms with something we read.
! */
  sconcat(OPTIMIZE(%));
  sconcat("BLOCK([%1,%2,%3,%4],%1:Y+X,%2:X^2,%3:%E^(Y+%2),%4:1/%1,4*%2*%4*%3+2*%4*%3-4*X*%3/%1^2+2*%3/%1^3)")$
  linel:79;
  79$
  LAPLACE(%E^(2*T+A)*SIN(T)*T,T,S);
--- 29,40 ----
  SIN(X+(O+1/2)*%PI);
  -COS(X)$
  (linel:500,DIFF(EXP(X^2+Y)/(X+Y),X,2));
  4*X^2*%E^(Y+X^2)/(Y+X)+2*%E^(Y+X^2)/(Y+X)-4*X*%E^(Y+X^2)/(Y+X)^2
  		      +2*%E^(Y+X^2)/(Y+X)^3$
! /* we use sconcat here, because it is not possible to compare the */
! /* output from optimize which involves gensyms with something we read. */
  sconcat(OPTIMIZE(%));
  sconcat("BLOCK([%1,%2,%3,%4],%1:Y+X,%2:X^2,%3:%E^(Y+%2),%4:1/%1,4*%2*%4*%3+2*%4*%3-4*X*%3/%1^2+2*%3/%1^3)")$
  linel:79;
  79$
  LAPLACE(%E^(2*T+A)*SIN(T)*T,T,S);
***************
*** 46,55 ****
  B*LAPLACE(F(T),T,S)+A*LAPLACE(F(T),T,S)/(S^2-A^2) = 2/S^3$
  LINSOLVE([%],['LAPLACE(F(T),T,S)]);
  exp:['LAPLACE(F(T),T,S) = (2*S^2-2*A^2)/(B*S^5+(A-A^2*B)*S^3)]$
  
  /* This is ok but needs a response */
! /*
! ("respond POSITIVE to a*b(a*b-1) positive,negative,or zero", ILT(EV(exp[1]),S,T));
! F(T) = -2*COSH(SQRT(A*B*(A*B-1))*T/B)/(A^3*B^2-2*A^2*B+A)
!      +A*T^2/(A*B-1)+2/(A^3*B^2-2*A^2*B+A)$
! */
\ No newline at end of file
--- 45,52 ----
  B*LAPLACE(F(T),T,S)+A*LAPLACE(F(T),T,S)/(S^2-A^2) = 2/S^3$
  LINSOLVE([%],['LAPLACE(F(T),T,S)]);
  exp:['LAPLACE(F(T),T,S) = (2*S^2-2*A^2)/(B*S^5+(A-A^2*B)*S^3)]$
  
  /* This is ok but needs a response */
! /* ("respond POSITIVE to a*b(a*b-1) positive,negative,or zero", ILT(EV(exp[1]),S,T)); */
! /* F(T) = -2*COSH(SQRT(A*B*(A*B-1))*T/B)/(A^3*B^2-2*A^2*B+A) */
! /*      +A*T^2/(A*B-1)+2/(A^3*B^2-2*A^2*B+A)$ */
\ No newline at end of file
