* Bug 15599 fixed: now degree of zero polynomial is -Inf
[scilab.git] / scilab / modules / ast / includes / ast / printvisitor.hxx
index a863a36..a06f5c6 100644 (file)
@@ -2,11 +2,14 @@
  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
  *  Copyright (C) 2007-2008 - DIGITEO - Bruno JOFRET
  *
- *  This file must be used under the terms of the CeCILL.
- *  This source file is licensed as described in the file COPYING, which
- *  you should have received as part of this distribution.  The terms
- *  are also available at
- *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
+ * Copyright (C) 2012 - 2016 - Scilab Enterprises
+ *
+ * This file is hereby licensed under the terms of the GNU GPL v2.0,
+ * pursuant to article 5.3.4 of the CeCILL v.2.1.
+ * This file was originally licensed under the terms of the CeCILL v2.1,
+ * and continues to be available under such terms.
+ * For more information, see the COPYING file which you should have received
+ * along with this program.
  *
  */
 
@@ -26,18 +29,19 @@ namespace ast
 class EXTERN_AST PrintVisitor : public GenVisitor<const_kind>
 {
 public:
-    PrintVisitor(std::wostream& my_ostr) :
-        ostr (&my_ostr)
-    {
-        indent = 0;
-        force_parenthesis = true;
-    }
 
-    PrintVisitor(std::wostream& my_ostr, bool parenthesis_display) :
+    PrintVisitor(std::wostream& my_ostr, bool parenthesis_display = true, bool _displayOriginal = true, bool _headerOnly = false) :
         ostr (&my_ostr),
-        force_parenthesis (parenthesis_display)
+        force_parenthesis (parenthesis_display),
+        displayOriginal(_displayOriginal),
+        headerOnly(_headerOnly),
+        indent(0),
+        is_last_matrix_line(false),
+        is_last_column_comment(false) { }
+
+    PrintVisitor* clone()
     {
-        indent = 0;
+        return new PrintVisitor(*ostr, force_parenthesis, displayOriginal, headerOnly);
     }
 
     /** \name Visit Matrix Expressions nodes.
@@ -110,6 +114,13 @@ public :
     ** \{ */
 public:
     virtual void visit(const ListExp &e);
+
+    /* optimized */
+    virtual void visit(const OptimizedExp &e);
+    virtual void visit(const MemfillExp &e);
+    virtual void visit(const DAXPYExp &e);
+    virtual void visit(const IntSelectExp &e);
+    virtual void visit(const StringSelectExp &e);
     /** \} */
 
 
@@ -118,13 +129,34 @@ public:
     `-------------*/
 protected:
     std::wostream   *ostr;
-    int             indent;
     bool            force_parenthesis;
+    const bool      displayOriginal;
+    const bool      headerOnly;
+    int             indent;
     bool            is_last_matrix_line;
+    bool            is_last_column_comment;
 
     void            apply_indent(void);
     void            enable_force_parenthesis(void);
     void            set_force_parenthesis(bool new_state);
+
+private:
+
+    void printString(const std::wstring & value)
+    {
+        std::wstring::const_iterator it;
+        *ostr << SCI_OPEN_STRING;
+        for (it = value.begin() ; it != value.end() ; ++it)
+        {
+            if ( *it == '\'' || *it == '"')
+            {
+                // ' -> '' and " -> "" in scilab strings
+                *ostr << *it;
+            }
+            *ostr << *it;
+        }
+        *ostr << SCI_CLOSE_STRING;
+    }
 };
 }
 #endif // !AST_PRINTVISITOR_HXX