Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  omputxml.gi   Sprache: unbekannt

 
###########################################################################
##
#W  omput.gi                OpenMath Package                 Andrew Solomon
#W                                                         Marco Costantini
#W                                                       Olexandr Konovalov
##
##
#Y  Copyright (C) 1999, 2000, 2001, 2006
#Y  School Math and Comp. Sci., University of St.  Andrews, Scotland
#Y  Copyright (C) 2004, 2005, 2006 Marco Costantini
##
##  Low-level methods for output in the OpenMath XML format
## 

    
###########################################################################
##  
#F  OMWriteLine( <stream>, <list> )
##
##  Input : List of arguments to print
##  Output: \t ^ OMIndent, arguments
##
InstallGlobalFunction(OMWriteLine, function(stream, alist)
 local i;

 # do the indentation
 AppendTo( stream, ListWithIdenticalEntries( OMIndent, '\t' ) );

 for i in alist do
  AppendTo(stream, i);
 od;
 AppendTo(stream, "\n");
end);


###########################################################################
## 
## Basic OpenMath objects and tags
##
###########################################################################


###########################################################################
##
#F  OMPutVar( <stream>, <name> )
##
##  Input : name as string
##  Output: <OMV name="<name>" />
##
InstallMethod( OMPutVar, "to write OMV in XML OpenMath", true,
[ IsOpenMathXMLWriter, IsObject ],0,
function( writer, name )
  OMWriteLine( writer![1], ["<OMV name=\"", String(name), "\"/>"] );
end);


###########################################################################
##
#F  OMPutSymbol( <stream>, <cd>, <name> )
##
##  Input : cd, name as strings
##  Output: <OMS cd="<cd>" name="<name>" />
##
InstallMethod( OMPutSymbol, "to write OMS in XML OpenMath", true,
[ IsOpenMathXMLWriter, IsString, IsString ],0,
function( writer, cd, name )
  OMWriteLine( writer![1], ["<OMS cd=\"", cd, "\" name=\"", name, "\"/>"] );
end);


###########################################################################
##
#M  OMPutOMAWithId( <OMWriter>, <reference> )
##
##
##
InstallMethod( OMPutOMAWithId, "to put Applications with Ids", true,
[IsOpenMathXMLWriter, IsString],0,
function(writer, reference)
  OMWriteLine( writer![1], [ "<OMA id=\"", reference, "\" >" ] );
end);


###########################################################################
##
#M  OMPutOMA
#M  OMPutEndOMA
##
InstallMethod(OMPutOMA, "to write OMA in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMWriteLine( writer![1], [ "<OMA>" ] );
    OMIndent := OMIndent + 1;
end);

InstallMethod(OMPutEndOMA, "to write /OMA in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OMA>" ] );
end);


###########################################################################
##
#M  OMPutOMATTR
#M  OMPutEndOMATTR
##
InstallMethod(OMPutOMATTR, "to write OMATTR in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMWriteLine( writer![1], [ "<OMATTR>" ] );
    OMIndent := OMIndent + 1;
end);

InstallMethod(OMPutEndOMATTR, "to write /OMATTR in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OMATTR>" ] );
end);

InstallMethod(OMPutOMATP, "to write OMATP in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMWriteLine( writer![1], [ "<OMATP>" ] );
    OMIndent := OMIndent + 1;
end);

InstallMethod(OMPutEndOMATP, "to write /OMATP in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OMATP>" ] );
end);


###########################################################################
##
#M  OMPutOMBIND
#M  OMPutEndOMBIND
##
InstallMethod(OMPutOMBIND, "to write OMBIND in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMWriteLine( writer![1], [ "<OMBIND>" ] );
    OMIndent := OMIndent + 1;
end);

InstallMethod(OMPutEndOMBIND, "to write /OMBIND in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OMBIND>" ] );
end);


###########################################################################
##
#M  OMPutOMBVAR
#M  OMPutEndOMBVAR
##
InstallMethod(OMPutOMBVAR, "to write OMBVAR in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMWriteLine( writer![1], [ "<OMBVAR>" ] );
    OMIndent := OMIndent + 1;
end);

InstallMethod(OMPutEndOMBVAR, "to write /OMBVAR in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OMBVAR>" ] );
end);


###########################################################################
##
#M  OMPutOME
#M  OMPutEndOME
##
InstallMethod(OMPutOME, "to write OME in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMWriteLine( writer![1], [ "<OME>" ] );
    OMIndent := OMIndent + 1;
end);

InstallMethod(OMPutEndOME, "to write /OME in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OME>" ] );
end);


###########################################################################
##
#M  OMPutOMOBJ
#M  OMPutEndOMOBJ
##

BindGlobal( "OMOBJ_TAG", "<OMOBJ xmlns=\"http://www.openmath.org/OpenMath\" version=\"2.0\">" );

InstallMethod(OMPutOMOBJ, "to write OMOBJ in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
 OMIndent := 0;
 OMWriteLine( writer![1], [ OMOBJ_TAG ] );
    OMIndent := 1;
end);

InstallMethod(OMPutEndOMOBJ, "to write /OMOBJ in XML OpenMath", true,
[IsOpenMathXMLWriter],0,
function( writer )
    OMIndent := OMIndent - 1;
 OMWriteLine( writer![1], [ "</OMOBJ>" ] );
end);


###########################################################################
## 
## Various methods for OMPut
## 

BindGlobal( "OMINT_LIMIT", 2^15936 );

###########################################################################
##
#M  OMPut( <OMWriter>, <int> )  
##
##  Printing for integers: specified in the standard
## 
InstallMethod(OMPut, "for an integer to XML OpenMath", true,
[IsOpenMathXMLWriter, IsInt],0,
function(writer, x)
    if x >= OMINT_LIMIT then
    OMWriteLine( writer![1], ["<OMI>", String(x), "</OMI>"] );
 else
    OMWriteLine( writer![1], ["<OMI>", x, "</OMI>"] );
 fi;
end);


###########################################################################
##
#M  OMPut( <OMWriter>, <string> )  
##
##  specified in the standard
## 
InstallMethod(OMPut, "for a string to XML OpenMath", true,
[IsOpenMathXMLWriter, IsString],0,
function(writer, x)
 if IsEmpty(x) and not IsEmptyString(x) then
  TryNextMethod();
 fi;

  # convert XML escaped chars
  x := ReplacedString( x, "&", "&" );
  x := ReplacedString( x, "<", "<" );

 OMWriteLine(writer![1], ["<OMSTR>",x,"</OMSTR>"]);
end);


###########################################################################
##
#M  OMPut( <stream>, <float> )
##
##  Printing for floats: specified in the standard
##
InstallMethod(OMPut, "for a float", true,
[IsOpenMathXMLWriter, IsFloat],0,
function(writer, x)
    local  string;
    # treatment of x=0 separately was added when discovered
    # that Float("-0") returns -0, but it is also faster.
    if IsZero(x) then
     OMWriteLine( writer![1], [ "<OMF dec=\"0\"/>" ] );
    else
     string := String( x );
     # the OpenMath standard requires floats encoded in this way, see
     # section 3.1.2
     string := ReplacedString( string, "e+", "e" );
     string := ReplacedString( string, "inf", "INF" );
     string := ReplacedString( string, "nan", "NaN" );
     OMWriteLine( writer![1], [ "<OMF dec=\"", string, "\"/>" ] );
 fi;
end);


###########################################################################
#
# Functions and methods for OMPlainString
#
InstallGlobalFunction( OMPlainString, function( string )
if IsString( string ) then
    # note that we do not validate the string!
    return Objectify( OMPlainStringDefaultType, [ string ] );
else
    Error( "The argument of OMPlainString must be a string" );
fi;                    
end);


###########################################################################
##
#M  PrintObj( <IsOMPlainString> )
##
InstallMethod( PrintObj, "for IsOMPlainString",
[ IsOMPlainStringRep and IsOMPlainString ],
function( obj )
    Print( obj![1] );
end);


###########################################################################
##
#M  OMPut( <IsOMPlainString> )
##
InstallMethod( OMPut, "for IsOMPlainString",
true,
[ IsOpenMathXMLWriter, IsOMPlainString ],
0,
function( writer, s )
    OMWriteLine( writer![1], [ s ] );
end); 


###########################################################################
#
# OMPutReference( OMWriter, x );
#
# This method prints OpenMath references and can be used for printing complex 
# objects, for example, ideals of polynomial rings (the ideal will carry the
# ring R, and each polynomial generating the ideal will also refer to the 
# ring R). The method uses OMR, if the object x already has the attribute 
# OMReference, and prints the object x otherwise. 
#
# The concept of references implies that the author of the code is able to
# decide which objects needs references, and assign references to them, e.g.
# using
# SetOMReference( r, Concatenation("polyring", RandomString(16)));
#
# Once an object obtained a reference, it can not be changed, therefore, the
# same reference will be used in communication with all other CASs. 
#
# However, the reference will be not printed automatically for an object
# having it - otherwise, you will not be able to send the same object to
# multiple CASs. Instead of this, the reference will be printed only when
# this will be enforced by the usage of OMPutReference.
#
# If the SuppressOpenMathReferences is set to true, then 
# OMPutReference (lib/openmath.gi) will put the actual 
# OpenMath code for an object whenever it has id or not.
#
InstallMethod( OMPutReference, 
"for a stream and an object with reference",
true,
[ IsOpenMathWriter, IsObject ],
0,
function( writer, x )
if HasOMReference( x ) and not SuppressOpenMathReferences then
   OMWriteLine( writer![1], [ "<OMR href=\"\043", OMReference( x ), "\" />" ] );
else   
   OMPut( writer, x );
fi;
end);

###########################################################################
#E

[ Dauer der Verarbeitung: 0.19 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge