X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=flower%2Fdstream.cc;h=fc15680d92af70110fefa5f34929bea4d0dccdde;hb=1cf3d59c1559fb9774c4c1c8cae155cfe54a927c;hp=23b77bbbc4ed51df03e99c1ef957e8683b4f48d2;hpb=52102901e53611ad7bad111c2f9d414d2e593bc3;p=lilypond.git diff --git a/flower/dstream.cc b/flower/dstream.cc index 23b77bbbc4..fc15680d92 100644 --- a/flower/dstream.cc +++ b/flower/dstream.cc @@ -3,7 +3,7 @@ source file of the Flower Library - (c) 1996,1997 Han-Wen Nienhuys + (c) 1996, 1997--1998 Han-Wen Nienhuys */ #include @@ -13,164 +13,172 @@ #include "text-db.hh" #include "string-convert.hh" #include "assoc-iter.hh" -/// indent of each level +#include "rational.hh" + +/// indent of each level const INDTAB = 2; /* should use Regexp library. */ static String -strip_pretty(String pretty_str) +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) +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) +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]; } -/** Output a string via the Dstream. This is the only output - interface. It delegates all conversion to String class. */ 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) +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 ) +Dstream::Dstream (ostream *r, char const * cfg_nm) { - os_l_ = r; - silent_assoc_p_ = new Assoc; - 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; + 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 i(*silent_assoc_p_); i.ok(); i++) { - i.val() = 0; + for (Assoc_iter i (*silent_assoc_p_); i.ok(); i++) + { + i.val() = false; } - } +