]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/dstream.cc
patch::: 1.2.8.jcn2
[lilypond.git] / flower / dstream.cc
index 16d83d6890245c929f90c506ca3cb225abeb52d6..ba46d69ed6851890f0601eaa9e80011e16fd283b 100644 (file)
@@ -3,19 +3,19 @@
 
   source file of the Flower Library
 
-  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c) 1996, 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include <fstream.h>
-#include "assoc.hh"
+#include "dictionary-iter.hh"
 #include "dstream.hh"
 #include "scalar.hh"
 #include "text-db.hh"
 #include "string-convert.hh"
-#include "assoc-iter.hh"
+#include "rational.hh"
 
-/// indent of each level 
-const INDTAB = 2;
+/// amount of indentation for each level.
+const int INDTAB = 2;
 
 /*
   should use Regexp library.
@@ -26,7 +26,7 @@ strip_pretty (String pretty_str)
   int i = pretty_str.index_i ('(');
   if (i>=0)
     pretty_str = pretty_str.left_str (i);
-  
+
   int l = pretty_str.index_last_i (' '); // strip until last ' '
   if (l>=0)
     pretty_str = pretty_str.nomid_str (0,l+1);
@@ -47,55 +47,55 @@ Dstream::identify_as (String name)
 {
   if (!os_l_)
     return *this;
-  
+
   String mem (strip_pretty (name));
   String cl (strip_member (mem));
   String idx = cl;
-  
-  if (silent_assoc_p_->elt_b (mem))
+
+  if (silent_dict_p_->elem_b (mem))
     idx  = mem;
-  else if (silent_assoc_p_->elt_b (cl))
+  else if (silent_dict_p_->elem_b (cl))
     idx = cl;
-  else 
+  else
     {
-      (*silent_assoc_p_)[idx] = false;
+      (*silent_dict_p_)[idx] = default_silence_b_;
     }
-  local_silence_b_ = (*silent_assoc_p_)[idx];
-  if (current_classname_str_ != idx && !local_silence_b_) 
+  local_silence_b_ = (*silent_dict_p_)[idx];
+  if (current_classname_str_ != idx && !local_silence_b_)
     {
       current_classname_str_=idx;
-      if (!(*silent_assoc_p_)["Dstream"])
+      if (!(*silent_dict_p_)["Dstream"])
        *os_l_ << "[" << current_classname_str_ << ":]"; // messy.
     }
   return *this;
 }
 
 bool
-Dstream::silence (String s)
+Dstream::silent_b (String s) const
 {
-  if (!silent_assoc_p_->elt_b (s))
+  if (!silent_dict_p_->elem_b (s))
     return false;
-  return (*silent_assoc_p_)[s];
+  return (*silent_dict_p_)[s];
 }
 
 Dstream &
-Dstream::operator<<(String s)
+Dstream::operator<<(void const *v_l)
 {
-  output (s);
+  output (String_convert::pointer_str (v_l));
   return *this;
 }
 
 Dstream &
-Dstream::operator<<(void const *v_l)
+Dstream::operator <<(Scalar s)
 {
-  output (String_convert::pointer_str (v_l));
+  output (s);
   return *this;
 }
 
 Dstream &
-Dstream::operator<<(char const *ch_l)
+Dstream::operator <<(const char * s)
 {
-  output (ch_l);
+  output (String (s));
   return *this;
 }
 
@@ -104,76 +104,80 @@ Dstream::output (String s)
 {
   if (local_silence_b_|| !os_l_)
     return ;
-  
-  for (char const *cp = s  ; *cp; cp++)
-    switch (*cp) 
+
+  for (char const *cp = s.ch_C (); *cp; cp++)
+    switch (*cp)
       {
       case '{':
       case '[':
       case '(': indent_level_i_ += INDTAB;
-       *os_l_ << *cp;          
+       *os_l_ << *cp;
        break;
-               
+
       case ')':
       case ']':
       case '}':
        indent_level_i_ -= INDTAB;
        *os_l_ << *cp           ;
-               
+
        assert  (indent_level_i_>=0) ;
        break;
-               
+
       case '\n':
-       *os_l_ << '\n' << String (' ', indent_level_i_) << flush;
-       break;        
+       *os_l_ << '\n' << to_str (' ', indent_level_i_) << flush;
+       break;
       default:
        *os_l_ << *cp;
        break;
       }
-  return ;    
+  return ;
 }
 
 
 Dstream::Dstream (ostream *r, char const * cfg_nm)
 {
   os_l_ = r;
-  silent_assoc_p_ = new Assoc<String,bool>;
+  silent_dict_p_ = new Dictionary<bool>;
+  default_silence_b_ = false;
   indent_level_i_ = 0;
   if (!os_l_)
     return;
-  
+
   char const * fn =cfg_nm ? cfg_nm : ".dstreamrc";
   {
-    ifstream ifs (fn); // can't open
+    ifstream ifs (fn); // can 't open
     if (!ifs)
       return;
   }
 
   Text_db cfg (fn);
-  while (! cfg.eof()){      
+  while (!cfg.eof_b ()){
     Text_record  r (cfg++);
-    if (r.size() != 2) 
+    if (r.size() != 2)
       {
-       r.message ("not enough fields in Dstream init.");
+       r.message (_ ("not enough fields in Dstream init"));
        continue;
       }
-    (*silent_assoc_p_)[r[0]] = (bool)(int)(Scalar (r[1]));
+    (*silent_dict_p_)[r[0]] = (bool)(int)(Scalar (r[1]));
   }
 
+  if ((*silent_dict_p_).elem_b ("Dstream_default_silence"))
+    default_silence_b_ = (*silent_dict_p_)["Dstream_default_silence"];
 }
 
 
 Dstream::~Dstream()
-{    
-  delete silent_assoc_p_;
+{
+  delete silent_dict_p_;
   assert (!indent_level_i_) ;
 }
 
 void
-Dstream::clear_silence() 
+Dstream::clear_silence()
 {
-  for (Assoc_iter<String, bool> i (*silent_assoc_p_); i.ok(); i++) 
+  for (Dictionary_iter<bool> i (*silent_dict_p_); i.ok(); i++)
     {
-      i.val() = false;
+      i.val_ref() = false;
     }
 }
+