]> git.donarmstrong.com Git - lilypond.git/blobdiff - flower/dstream.cc
release: 1.0.1
[lilypond.git] / flower / dstream.cc
index f6d1d48867faf0090bac8093052c83bd4c356cd0..fc15680d92af70110fefa5f34929bea4d0dccdde 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the Flower Library
 
-  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c) 1996, 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include <fstream.h>
@@ -13,8 +13,9 @@
 #include "text-db.hh"
 #include "string-convert.hh"
 #include "assoc-iter.hh"
+#include "rational.hh"
 
-/// indent of each level 
+/// indent of each level
 const INDTAB = 2;
 
 /*
@@ -23,152 +24,161 @@ const INDTAB = 2;
 static String
 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);
-    return 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);
+  return pretty_str;
 }
 
 static String
 strip_member (String pret)
 {
-    int l=pret.index_last_i (':')-1;
-    if (l>=0)
-       pret = pret.left_str (l);
-    return pret;
+  int l=pret.index_last_i (':')-1;
+  if (l>=0)
+    pret = pret.left_str (l);
+  return pret;
 }
 
 Dstream&
 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))
-       idx  = mem;
-    else if (silent_assoc_p_->elt_b (cl))
-       idx = cl;
-    else {
-       (*silent_assoc_p_)[idx] = false;
+  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))
+    idx  = mem;
+  else if (silent_assoc_p_->elt_b (cl))
+    idx = cl;
+  else
+    {
+      (*silent_assoc_p_)[idx] = default_silence_b_;
     }
-    local_silence_b_ = (*silent_assoc_p_)[idx];
-    if (current_classname_str_ != idx && !local_silence_b_) {
-       current_classname_str_=idx;
-       if (!(*silent_assoc_p_)["Dstream"])
-           *os_l_ << "[" << current_classname_str_ << ":]"; // messy.
+  local_silence_b_ = (*silent_assoc_p_)[idx];
+  if (current_classname_str_ != idx && !local_silence_b_)
+    {
+      current_classname_str_=idx;
+      if (!(*silent_assoc_p_)["Dstream"])
+       *os_l_ << "[" << current_classname_str_ << ":]"; // messy.
     }
-    return *this;
+  return *this;
 }
 
 bool
-Dstream::silence (String s)
+Dstream::silent_b (String s) const
 {
-    if (!silent_assoc_p_->elt_b (s))
-       return false;
-    return (*silent_assoc_p_)[s];
+  if (!silent_assoc_p_->elt_b (s))
+    return false;
+  return (*silent_assoc_p_)[s];
 }
 
 Dstream &
-Dstream::operator<<(String s)
+Dstream::operator<<(void const *v_l)
 {
-    output (s);
-    return *this;
+  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));
-    return *this;
+  output (s);
+  return *this;
 }
 
 Dstream &
-Dstream::operator<<(char const *ch_l)
+Dstream::operator <<(const char * s)
 {
-    output (ch_l);
-    return *this;
+  output (String (s));
+  return *this;
 }
 
 void
 Dstream::output (String s)
 {
-    if (local_silence_b_|| !os_l_)
-       return ;
-    
-    for (char const *cp = s  ; *cp; cp++)
-       switch (*cp) {
-           case '{':
-           case '[':
-           case '(': indent_level_i_ += INDTAB;
-               *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;        
-           default:
-               *os_l_ << *cp;
-               break;
-           }
-    return ;    
+  if (local_silence_b_|| !os_l_)
+    return ;
+
+  for (char const *cp = s.ch_C (); *cp; cp++)
+    switch (*cp)
+      {
+      case '{':
+      case '[':
+      case '(': indent_level_i_ += INDTAB;
+       *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' << to_str (' ', indent_level_i_) << flush;
+       break;
+      default:
+       *os_l_ << *cp;
+       break;
+      }
+  return ;
 }
 
 
 Dstream::Dstream (ostream *r, char const * cfg_nm)
 {
-    os_l_ = r;
-    silent_assoc_p_ = new Assoc<String,bool>;
-    indent_level_i_ = 0;
-    if (!os_l_)
-       return;
-    
-    char const * fn =cfg_nm ? cfg_nm : ".dstreamrc";
-    {
-       ifstream ifs (fn);      // can't open
-       if (!ifs)
-           return;
-    }
-
-    Text_db cfg (fn);
-    while (! cfg.eof()){            
-        Text_record  r (cfg++);
-        if (r.size() != 2) {
-            r.message ("not enough fields in Dstream init.");
-            continue;
-        }
-        (*silent_assoc_p_)[r[0]] = (bool)(int)(Scalar (r[1]));
-    }
-
+  os_l_ = r;
+  silent_assoc_p_ = new Assoc<String,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
+    if (!ifs)
+      return;
+  }
+
+  Text_db cfg (fn);
+  while (!cfg.eof_b ()){
+    Text_record  r (cfg++);
+    if (r.size() != 2)
+      {
+       r.message (_ ("Not enough fields in Dstream init."));
+       continue;
+      }
+    (*silent_assoc_p_)[r[0]] = (bool)(int)(Scalar (r[1]));
+  }
+
+  if ((*silent_assoc_p_).elt_b ("Dstream_default_silence"))
+    default_silence_b_ = (*silent_assoc_p_)["Dstream_default_silence"];
 }
 
 
 Dstream::~Dstream()
-{    
-    delete silent_assoc_p_;
-    assert (!indent_level_i_) ;
+{
+  delete silent_assoc_p_;
+  assert (!indent_level_i_) ;
 }
 
 void
-Dstream::clear_silence() 
+Dstream::clear_silence()
 {
-    for (Assoc_iter<String, bool> i (*silent_assoc_p_); i.ok(); i++) {
-       i.val() = 0;
+  for (Assoc_iter<String, bool> i (*silent_assoc_p_); i.ok(); i++)
+    {
+      i.val() = false;
     }
 }
+