From 44db43814df6d3d9d11d5f84a2b894ff386024aa Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Fri, 1 Dec 2000 12:48:40 +0100 Subject: [PATCH] patch::: 1.3.114.jcn1 1.3.114.jcn1 ============ * Moved writing of \header strings feature from lilypond-book to lilypond. --- CHANGES | 5 ++++ VERSION | 2 +- input/test/american-chords.ly | 2 +- input/test/chord-names.ly | 2 +- input/test/jazz-chords.ly | 2 +- lily/include/main.hh | 1 + lily/include/paper-def.hh | 2 ++ lily/include/paper-outputter.hh | 2 ++ lily/include/paper-stream.hh | 7 ++++- lily/main.cc | 19 +++++-------- lily/paper-def.cc | 10 +++++++ lily/paper-outputter.cc | 46 ++++++++++++++++++++++++++++++-- lily/paper-score.cc | 7 ++--- lily/paper-stream.cc | 47 +++++++++++++++++++++------------ lily/parser.yy | 2 +- scripts/lilypond-book.py | 28 ++------------------ 16 files changed, 117 insertions(+), 67 deletions(-) diff --git a/CHANGES b/CHANGES index 6e3fa7d01a..aa2ce1f6de 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,8 @@ +1.3.114.jcn1 +============ + +* Moved writing of \header strings feature from lilypond-book to lilypond. + 1.3.113.jcn2 ============ diff --git a/VERSION b/VERSION index afc6d0b7f0..73a41db9ce 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=3 PATCH_LEVEL=114 -MY_PATCH_LEVEL= +MY_PATCH_LEVEL=jcn1 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/input/test/american-chords.ly b/input/test/american-chords.ly index ac9716fe66..79350c64bf 100644 --- a/input/test/american-chords.ly +++ b/input/test/american-chords.ly @@ -50,7 +50,7 @@ c:m7.9 % Minor ninth { \translator { \ChordNamesContext - ChordNames \override #'word-space = #1 + ChordName \override #'word-space = #1 } } } diff --git a/input/test/chord-names.ly b/input/test/chord-names.ly index d640871803..ef9dd45407 100644 --- a/input/test/chord-names.ly +++ b/input/test/chord-names.ly @@ -30,7 +30,7 @@ chord = \notes\transpose c''\chords{ \translator { \ChordNamesContext - ChordNames \override #'word-space = #1 + ChordName \override #'word-space = #1 } } } diff --git a/input/test/jazz-chords.ly b/input/test/jazz-chords.ly index d5fd1fc651..ca0225fb77 100644 --- a/input/test/jazz-chords.ly +++ b/input/test/jazz-chords.ly @@ -61,7 +61,7 @@ c:m5-.7- % o = diminished seventh chord > \paper { - \translator { \ChordNamesContext ChordNames \override #'word-space = #1 } + \translator { \ChordNamesContext ChordName \override #'word-space = #1 } % \translator { \LyricsContext textScriptWordSpace = #0.3 } } } diff --git a/lily/include/main.hh b/lily/include/main.hh index de6cf4f417..f8b2612d21 100644 --- a/lily/include/main.hh +++ b/lily/include/main.hh @@ -36,6 +36,7 @@ extern Array get_inclusion_names (); extern void set_inclusion_names (Array); extern File_path global_path; +extern Array global_score_header_fields; extern String default_outname_base_global; extern String default_outname_suffix_global; diff --git a/lily/include/paper-def.hh b/lily/include/paper-def.hh index 7c569fd7ad..6c137247a6 100644 --- a/lily/include/paper-def.hh +++ b/lily/include/paper-def.hh @@ -56,6 +56,8 @@ public: SCM font_descriptions ()const; virtual ~Paper_def (); static int default_count_i_; + String current_output_base_; + /* JUNKME */ diff --git a/lily/include/paper-outputter.hh b/lily/include/paper-outputter.hh index 3a7d04466c..2f30e86e43 100644 --- a/lily/include/paper-outputter.hh +++ b/lily/include/paper-outputter.hh @@ -43,6 +43,8 @@ public: void output_comment (String s); void output_string (SCM s); void output_scheme (SCM scm); + static void output_score_header_field (String filename, String key, String value); + static void output_score_header_fields (Paper_def *paper); }; #endif // PAPER_OUTPUTTER_HH diff --git a/lily/include/paper-stream.hh b/lily/include/paper-stream.hh index ab5de0684e..4b5f51652b 100644 --- a/lily/include/paper-stream.hh +++ b/lily/include/paper-stream.hh @@ -13,7 +13,7 @@ class Paper_stream { public: bool outputting_comment_b_; - ostream *os; + ostream *os_; int nest_level; /// to check linelen in output. TeX has limits. int line_len_i_; @@ -32,4 +32,9 @@ private: void break_line(); }; +class ostream; +ostream *open_file_stream (String filename); +void close_file_stream (ostream *os); + + #endif // PAPER_STREAM_HH diff --git a/lily/main.cc b/lily/main.cc index 8a998eb9f0..b98056a375 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -51,6 +51,8 @@ String init_str_global; int default_count_global; File_path global_path; +Array global_score_header_fields; + bool safe_global_b = false; bool experimental_features_global_b = false; bool dependency_global_b = false; @@ -72,6 +74,7 @@ String distill_inname_str (String name_str, String& ext_r); Long_option_init theopts[] = { {_i ("EXT"), "output-format", 'f', _i ("use output format EXT (scm, ps, tex or as)")}, {0, "help", 'h', _i ("this help")}, + {_i ("FIELD"), "header", 'H', _i ("write header field to BASENAME.FIELD")}, {_i ("DIR"), "include", 'I', _i ("add DIR to search path")}, {_i ("FILE"), "init", 'i', _i ("use FILE as init file")}, {0, "dependencies", 'M', _i ("write Makefile dependencies for every input file")}, @@ -234,19 +237,6 @@ setup_paths () global_path.add (p); #if !KPATHSEA - /* - Although kpathsea seems nice, it is not universally available - (GNU/Windows). - - Compiling kpathsea seems not possible without - (compiling) a matching tex installation. Apart from the fact - that I cannot get kpathsea compiled for GNU/Windows, another - major problem is that TeX installations may be different on - different clients, so it wouldn't work anyway. While ugly, - this code is simple and effective. - -- jcn - */ - /* Urg: GNU make's $(word) index starts at 1 */ int i = 1; while (global_path.try_add (p + to_str (".") + to_str (i))) @@ -361,6 +351,9 @@ main (int argc, char **argv) case 'Q': find_old_relative_b= true; break; + case 'H': + global_score_header_fields.push (oparser_global_p->optional_argument_ch_C_); + break; case 'I': global_path.push (oparser_global_p->optional_argument_ch_C_); break; diff --git a/lily/paper-def.cc b/lily/paper-def.cc index 27c33651a4..001e801175 100644 --- a/lily/paper-def.cc +++ b/lily/paper-def.cc @@ -121,6 +121,11 @@ Paper_def::paper_stream_p () const } +/* URGURGUGUUGH + + not const. + + Wat een puinhoop is dit. */ String Paper_def::base_output_str () const { @@ -133,6 +138,11 @@ Paper_def::base_output_str () const if (def) str += "-" + to_str (def); } + + /* Must store value, as this function can be called only once */ + Paper_def *urg = (Paper_def*)this; + urg->current_output_base_ = str; + return str; } diff --git a/lily/paper-outputter.cc b/lily/paper-outputter.cc index 2c2f179019..781215c200 100644 --- a/lily/paper-outputter.cc +++ b/lily/paper-outputter.cc @@ -25,6 +25,8 @@ #include "scope.hh" #include "identifier.hh" #include "lily-version.hh" +#include "paper-def.hh" +#include "file-results.hh" /* @@ -159,6 +161,7 @@ Paper_outputter::dump_scheme (SCM s) free (c); } } + void Paper_outputter::output_scope (Scope *scope, String prefix) { @@ -233,10 +236,49 @@ Paper_outputter::output_int_def (String k, int v) output_scheme (scm); } - - void Paper_outputter::output_string (SCM str) { *stream_p_ << ly_scm2string (str); } + +void +Paper_outputter::output_score_header_field (String filename, String key, String value) +{ + if (filename != "-") + filename += String (".") + key; + progress_indication (_f ("writing header field %s to %s...", + key, + filename == "-" ? String ("") : filename)); + + ostream *os = open_file_stream (filename); + *os << value; + close_file_stream (os); + progress_indication ("\n"); +} + +void +Paper_outputter::output_score_header_fields (Paper_def *paper) +{ + if (global_score_header_fields.size ()) + { + SCM fields; +#if 0 // ugh, how to reach current Score or Paper_score? + if (paper->header_l_) + fields = paper->header_l_->to_alist (); + else +#endif + fields = header_global_p->to_alist (); + String base = paper->current_output_base_; + for (int i = 0; i < global_score_header_fields.size (); i++) + { + String key = global_score_header_fields[i]; + // SCM val = gh_assoc (ly_str02scm (key.ch_C ()), fields); + SCM val = gh_assoc (ly_symbol2scm (key.ch_C ()), fields); + String s; + if (gh_pair_p (val)) + s = ly_scm2string (gh_cdr (val)); + output_score_header_field (base, key, s); + } + } +} diff --git a/lily/paper-score.cc b/lily/paper-score.cc index f00db3099c..b5f5e2d193 100644 --- a/lily/paper-score.cc +++ b/lily/paper-score.cc @@ -67,8 +67,6 @@ Paper_score::calc_breaking () return sol; } - - /* urg. clean me */ @@ -125,10 +123,13 @@ Paper_score::process () outputter_l_->output_scheme (scm); progress_indication ("\n"); + + outputter_l_->output_score_header_fields (paper_l_); + // huh? delete outputter_l_; outputter_l_ = 0; - + if (verbose_global_b) ly_display_scm (scm_gc_stats ()); } diff --git a/lily/paper-stream.cc b/lily/paper-stream.cc index caab11e504..86f2ee5de8 100644 --- a/lily/paper-stream.cc +++ b/lily/paper-stream.cc @@ -14,21 +14,21 @@ const int MAXLINELEN = 200; -Paper_stream::Paper_stream (String filename) +ostream * +open_file_stream (String filename) { + ostream *os; if (filename.length_i () && (filename != "-")) os = new ofstream (filename.ch_C ()); else - // os = new ostream (cout.ostreambuf ()); os = new ostream (cout._strbuf); if (!*os) error (_f ("can't open file: `%s'", filename)); - nest_level = 0; - line_len_i_ = 0; - outputting_comment_b_=false; + return os; } -Paper_stream::~Paper_stream () +void +close_file_stream (ostream *os) { *os << flush; if (!*os) @@ -37,6 +37,19 @@ Paper_stream::~Paper_stream () exit_status_i_ = 1; } delete os; +} + +Paper_stream::Paper_stream (String filename) +{ + os_ = open_file_stream (filename); + nest_level = 0; + line_len_i_ = 0; + outputting_comment_b_=false; +} + +Paper_stream::~Paper_stream () +{ + close_file_stream (os_); assert (nest_level == 0); } @@ -48,7 +61,7 @@ Paper_stream::operator << (String s) { if (outputting_comment_b_) { - *os << *cp; + *os_ << *cp; if (*cp == '\n') { outputting_comment_b_=false; @@ -61,19 +74,19 @@ Paper_stream::operator << (String s) { case '%': outputting_comment_b_ = true; - *os << *cp; + *os_ << *cp; break; case '{': nest_level++; - *os << *cp; + *os_ << *cp; break; case '}': nest_level--; - *os << *cp; + *os_ << *cp; if (nest_level < 0) { - delete os; // we want to see the remains. + delete os_; // we want to see the remains. assert (nest_level>=0); } @@ -81,33 +94,33 @@ Paper_stream::operator << (String s) if (nest_level == 0) break; - *os << '%'; + *os_ << '%'; break_line (); break; case '\n': break_line (); break; case ' ': - *os << ' '; + *os_ << ' '; if (line_len_i_ > MAXLINELEN) break_line (); break; default: - *os << *cp; + *os_ << *cp; break; } } //urg, for debugging only!! - *os << flush; + *os_ << flush; return *this; } void Paper_stream::break_line () { - *os << '\n'; - *os << to_str (' ', nest_level); + *os_ << '\n'; + *os_ << to_str (' ', nest_level); outputting_comment_b_ = false; line_len_i_ = 0; } diff --git a/lily/parser.yy b/lily/parser.yy index b44508c4b8..c39f5ecc32 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -368,7 +368,7 @@ lilypond_header_body: lilypond_header: HEADER '{' lilypond_header_body '}' { $$ = $3; - THIS->lexer_p_-> scope_l_arr_.pop (); + THIS->lexer_p_-> scope_l_arr_.pop (); } ; diff --git a/scripts/lilypond-book.py b/scripts/lilypond-book.py index 79f63be70c..763aa79fa1 100644 --- a/scripts/lilypond-book.py +++ b/scripts/lilypond-book.py @@ -348,7 +348,7 @@ output_dict= { # should also support fragment in 'output-all': r""" -@include %(fn)s-doc.texi +@include %(fn)s.texidoc @tex \catcode`\@=12 \input lilyponddefs @@ -840,28 +840,6 @@ def system (cmd): error ('Error command exited with value %d\n' % st) return st - -texidoc_re = re.compile (r'.*?\n\s*texidoc\s*=\s*"((([^"])|([^\\]\\"))*)".*', re.DOTALL) -def extract_texidoc (lyfile): - """ - Extract the ``texidoc'' entry from the lyfile.ly, and write it to - lyfile-doc.texi. - - Maybe this should be output by `lilypond --header=texidoc' or so? - """ - outfile = os.path.basename (os.path.splitext (lyfile)[0]) + "-doc.texi" - sys.stderr.write ("Writing `%s'\n" % outfile) - f = open (lyfile) - s = f.read (-1) -# doc = re.sub (r'(.|\n)*?\n\s*texidoc\s*=\s*"((([^"])|([^\\]\\"))*)"(.|\n)*', '\\2', s) + '\n' - m = texidoc_re.match (s) - doc = '' - if m: - doc = m.group (1) + '\n' - f = open (outfile, 'w') - f.write (doc) - f.close () - def compile_all_files (chunks): eps = [] tex = [] @@ -894,9 +872,7 @@ def compile_all_files (chunks): incs = map (incl_opt, include_path) lilyopts = string.join (incs, ' ' ) texfiles = string.join (tex, ' ') - system ('lilypond %s %s' % (lilyopts, texfiles)) - for i in tex: - extract_texidoc (i) + system ('lilypond --header=texidoc %s %s' % (lilyopts, texfiles)) for e in eps: system(r"tex '\nonstopmode \input %s'" % e) system(r"dvips -E -o %s %s" % (e + '.eps', e)) -- 2.39.2