@@ -958,6 +958,47 @@ codemirror_define_grammar_mode("scilite", {
958958"supportAutoCompletion" : true
959959} , CodeMirror , CodeMirrorGrammar ) ;
960960
961+ function serialize_scalar ( x )
962+ {
963+ if ( "string" === typeof x )
964+ {
965+ return x ;
966+ }
967+ x = $ . _ . tonumber ( x ) ;
968+ if ( "number" === typeof x )
969+ {
970+ if ( isNaN ( x ) ) return { scalar :"nan" } ;
971+ if ( ! isFinite ( x ) ) return { scalar :0 > x ? "-inf" : "inf" } ;
972+ }
973+ return x ;
974+ }
975+ function unserialize_scalar ( x )
976+ {
977+ if ( "string" === typeof x )
978+ {
979+ return x ;
980+ }
981+ if ( x )
982+ {
983+ if ( ( null != x . re ) && ( null != x . im ) )
984+ {
985+ return $ . fn . complex ( unserialize_scalar ( x . re ) , unserialize_scalar ( x . im ) ) ;
986+ }
987+ if ( "inf" === x . scalar )
988+ {
989+ return Infinity ;
990+ }
991+ if ( "-inf" === x . scalar )
992+ {
993+ return - Infinity ;
994+ }
995+ if ( "nan" === x . scalar )
996+ {
997+ return NaN ;
998+ }
999+ }
1000+ return x ;
1001+ }
9611002function serialize ( x )
9621003{
9631004 if ( Array . isArray ( x ) )
@@ -966,11 +1007,11 @@ function serialize(x)
9661007 }
9671008 else if ( x instanceof $ . fn . complex )
9681009 {
969- return { re :$ . _ . tonumber ( x . re ) , im :$ . _ . tonumber ( x . im ) } ;
1010+ return { re :serialize_scalar ( x . re ) , im :serialize_scalar ( x . im ) } ;
9701011 }
9711012 else
9721013 {
973- return $ . _ . tonumber ( x ) ;
1014+ return serialize_scalar ( x ) ;
9741015 }
9751016}
9761017function unserialize ( x )
@@ -979,13 +1020,9 @@ function unserialize(x)
9791020 {
9801021 return x . map ( unserialize ) ;
9811022 }
982- else if ( x && ( null != x . re ) && ( null != x . im ) )
983- {
984- return $ . fn . complex ( x . re , x . im ) ;
985- }
9861023 else
9871024 {
988- return x ;
1025+ return unserialize_scalar ( x ) ;
9891026 }
9901027}
9911028
0 commit comments