Back to index

wims  3.65+svn20090927
UnaryPostfixedOperator.java
Go to the documentation of this file.
00001 /*
00002 $Id: UnaryPostfixedOperator.java,v 1.3 2003/02/18 11:48:47 sander Exp $
00003 */
00004 
00005 
00006 /*
00007 Copyright (C) 2001-2002 Mainline Project (I3S - ESSI - CNRS -UNSA)
00008 
00009 This library is free software; you can redistribute it and/or
00010 modify it under the terms of the GNU Lesser General Public
00011 License as published by the Free Software Foundation; either
00012 version 2.1 of the License, or (at your option) any later version.
00013 
00014 This library is distributed in the hope that it will be useful,
00015 but WITHOUT ANY WARRANTY; without even the implied warranty of
00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00017 Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public
00020 License along with this library; if not, write to the Free Software
00021 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00022 
00023 For further information on the GNU Lesser General Public License,
00024 see: http://www.gnu.org/copyleft/lesser.html
00025 For further information on this library, contact: mainline@essi.fr
00026 */
00027 
00028 
00029 package fr.ove.openmath.jome.model;
00030 
00031 import java.util.*;
00032 import fr.ove.openmath.jome.model.*;
00033 
00038 public class UnaryPostfixedOperator extends Operator {
00046     public FormulaTreeStructure insert(FormulaTreeStructure current) {
00047         VariableOrNumber template;
00048         
00049         // On cherche la position d'insertion de notre operateur
00050         current = findLocation(current);
00051         
00052         // On ajoute l'opérateur comme fils à l'opérateur courant
00053         current.addChild(this);
00054 
00055         if ((current.getFather() == null) && (current.getNbChildren() == 1))
00056             addChild(new VariableOrNumber());
00057         else {
00058             FormulaTreeStructure fts = (FormulaTreeStructure) current.getChild(getRank() - 1);
00059             // à cause des priorités sur les opérateurs, on ajoute comme fils l'opérateur
00060             // dont le rang est juste inférieur à notre instance
00061             addChild(fts);
00062             
00063             // on enlève l'opérateur qu'on a fait "descendre", de la liste
00064             // de son précédent père (son grand père maintenant)
00065             current.removeChild(fts);
00066         }
00067         
00068         FormulaTreeStructure child = (FormulaTreeStructure) getChild(0);
00069         if (child.getResourceIdentifier().equals("OPEN_PAREN"))
00070             ((Bracket) child).setIsVisible(true); // Dans le cas où la ! est fille d'une division, les parenthèses
00071             // auront été rendues invisibles d'abord.
00072             
00073 
00074         // On retourne la reférence de l'instance.
00075         return this;
00076     }
00077     
00081     public String createLinear(String linear) {
00082         linear = ((FormulaTreeStructure) getChild(0)).createLinear(linear);
00083         linear += getTheOperator();
00084         return linear;
00085     }
00086 
00090     public String evaluate() {
00091         return ((FormulaTreeStructure) getChild(0)).evaluate() + getTheOperator();
00092     }
00093 }
00094