From 88d259d05cbd7ff6e077d58278a615fcedd844c7 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Mon, 12 Oct 1998 23:07:58 +0300 Subject: [PATCH] patch::: 1.0.15.jcn2: pl2 voor riel pl 15.jcn2 - autoconf on guile - graphical-lisp-element + silly half hook-up with autuplet (see init/test/tup.ly) --- NEWS | 5 +++ VERSION | 2 +- configure.in | 2 +- flower/include/virtual-methods.hh | 44 ++++++++++++------------ input/test/tup.ly | 3 ++ lily/auto-plet-engraver.cc | 19 ++++++----- lily/engraver.cc | 7 +++- lily/graphical-lisp-element.cc | 47 ++++++++++++++++++++++++++ lily/include/auto-plet-engraver.hh | 4 +-- lily/include/engraver.hh | 1 + lily/include/graphical-lisp-element.hh | 39 +++++++++++++++++++++ lily/include/lily-guile.hh | 16 +++++++++ lily/include/lily-proto.hh | 1 + lily/include/score-element-info.hh | 2 ++ lily/include/score-engraver.hh | 1 + lily/main.cc | 22 ++++++++++-- lily/score-element-info.cc | 9 +++++ lily/score-engraver.cc | 15 +++++--- make/STATE-VECTOR | 1 + 19 files changed, 198 insertions(+), 42 deletions(-) create mode 100644 input/test/tup.ly create mode 100644 lily/graphical-lisp-element.cc create mode 100644 lily/include/graphical-lisp-element.hh create mode 100644 lily/include/lily-guile.hh diff --git a/NEWS b/NEWS index 68ee27c246..11fe12c206 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +pl 15.jcn2 + - autoconf on guile + - graphical-lisp-element + silly half hook-up with autuplet + (see init/test/tup.ly) + pl 15.jcn1 - autoconf on mf,mfont mp,mpost diff --git a/VERSION b/VERSION index 90ec2ef110..bddde17e00 100644 --- a/VERSION +++ b/VERSION @@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond MAJOR_VERSION=1 MINOR_VERSION=0 PATCH_LEVEL=15 -MY_PATCH_LEVEL=jcn1 +MY_PATCH_LEVEL=jcn2 # use the above to send patches: MY_PATCH_LEVEL is always empty for a # released version. diff --git a/configure.in b/configure.in index 22893a11fe..d4a297075f 100644 --- a/configure.in +++ b/configure.in @@ -37,7 +37,7 @@ AC_STEPMAKE_MSGFMT AC_STEPMAKE_TEXMF # AC_STEPMAKE_TEXMF_DIRS AC_STEPMAKE_YODL - +AC_CHECK_LIB(guile, scm_shell) dnl should check out -print dnl huh? diff --git a/flower/include/virtual-methods.hh b/flower/include/virtual-methods.hh index 27557117e3..39795ce115 100644 --- a/flower/include/virtual-methods.hh +++ b/flower/include/virtual-methods.hh @@ -35,29 +35,31 @@ static char const *static_name() int yet_another_stupid_function_to_allow_semicolon() -#define DECLARE_VIRTUAL_COPY_CONS(T,R)\ +#define DECLARE_VIRTUAL_COPY_CONS(T, R)\ virtual R *clone() const -#define IMPLEMENT_VIRTUAL_COPY_CONS(T,R)\ - R *T::clone() const { return new T(*this); } \ +#define IMPLEMENT_VIRTUAL_COPY_CONS(T, R)\ + R *T::clone() const { return new T(*this); }\ + -#define IMPLEMENT_IS_TYPE_B(D) \ - IMPLEMENT_STATIC_NAME(D)\ - bool D::static_is_type_b (const char *s) \ -{ \ - return s == static_name(); \ -} - -#define IMPLEMENT_IS_TYPE_B1(D,B) \ - IMPLEMENT_STATIC_NAME(D)\ - bool D::static_is_type_b (const char *s) \ -{ \ - return s == static_name() || B::static_is_type_b (s); \ -} -#define IMPLEMENT_IS_TYPE_B2(D, BA, BB) \ - IMPLEMENT_STATIC_NAME(D)\ - bool D::static_is_type_b (const char *s) \ -{ \ - return s == static_name() || BA::static_is_type_b (s) || BB::static_is_type_b (s); \ +#define IMPLEMENT_IS_TYPE_B(D)\ + IMPLEMENT_STATIC_NAME(D)\ + bool D::static_is_type_b (const char *s)\ +{\ + return s == static_name();\ +} + +#define IMPLEMENT_IS_TYPE_B1(D, B)\ + IMPLEMENT_STATIC_NAME(D)\ + bool D::static_is_type_b (const char *s)\ +{\ + return s == static_name() || B::static_is_type_b (s);\ +} + +#define IMPLEMENT_IS_TYPE_B2(D, BA, BB)\ + IMPLEMENT_STATIC_NAME(D)\ + bool D::static_is_type_b (const char *s)\ +{\ + return s == static_name() || BA::static_is_type_b (s) || BB::static_is_type_b (s);\ } #endif diff --git a/input/test/tup.ly b/input/test/tup.ly new file mode 100644 index 0000000000..010e77ffe8 --- /dev/null +++ b/input/test/tup.ly @@ -0,0 +1,3 @@ +\score{ + \notes \type Staff \times 2/3 { a b c } +} diff --git a/lily/auto-plet-engraver.cc b/lily/auto-plet-engraver.cc index 8812f6245c..3ed45b2a46 100644 --- a/lily/auto-plet-engraver.cc +++ b/lily/auto-plet-engraver.cc @@ -9,7 +9,7 @@ #include "auto-plet-engraver.hh" #include "command-request.hh" -#include "slur.hh" +#include "graphical-lisp-element.hh" #include "note-column.hh" bool @@ -27,12 +27,11 @@ Tuplet_engraver::do_try_request (Request *r) return true; } - void Tuplet_engraver::do_process_requests () { int stopcount =0; - Link_array start_arr; + Link_array start_arr; for (int i=0; i < bracket_req_arr_.size (); i++) { @@ -40,16 +39,17 @@ Tuplet_engraver::do_process_requests () stopcount++; if (bracket_req_arr_[i]->spantype == Span_req::START) { - Slur *sp =new Slur; - start_arr.push (sp); - announce_element (Score_element_info (sp, bracket_req_arr_[i])); + Graphical_lisp_element* glep = new Graphical_lisp_element ("tuplet"); + start_arr.push (glep); +// lots of stuff does info->elem_l_->is_type () +// announce_element (Score_element_info (glep, bracket_req_arr_[i])); } } for (; stopcount--; ) { - Slur *sp = started_span_p_arr_.pop (); - stop_now_span_p_arr_.push (sp); + Graphical_lisp_element* glep = started_span_p_arr_.pop (); + stop_now_span_p_arr_.push (glep); } for (int i=0; i < start_arr.size (); i++) @@ -63,7 +63,8 @@ Tuplet_engraver::acknowledge_element (Score_element_info i) { Note_column *nc = (Note_column*)i.elem_l_->access_Item (); for (int j =0; j add_column (nc); +// started_span_p_arr_[j]->add_column (nc); + started_span_p_arr_[j]->call ("add-column", (void*)nc); } } diff --git a/lily/engraver.cc b/lily/engraver.cc index ecad055870..3ecd606e92 100644 --- a/lily/engraver.cc +++ b/lily/engraver.cc @@ -26,13 +26,18 @@ Engraver::announce_element (Score_element_info i) daddy_grav_l()->announce_element (i); } - void Engraver::typeset_element (Score_element*p) { daddy_grav_l()->typeset_element (p); } +void +Engraver::typeset_element (Graphical_lisp_element*p) +{ + daddy_grav_l ()->typeset_element (p); +} + Paper_def* Engraver::paper() const { diff --git a/lily/graphical-lisp-element.cc b/lily/graphical-lisp-element.cc new file mode 100644 index 0000000000..8b9fdefc1a --- /dev/null +++ b/lily/graphical-lisp-element.cc @@ -0,0 +1,47 @@ +/* + graphical-lisp-element.cc -- implement Graphical_lisp_element + + source file of the GNU LilyPond music typesetter + + (c) 1998 Jan Nieuwenhuizen +*/ + +#include "graphical-lisp-element.hh" +#include "string.hh" +#include "debug.hh" + +#undef IMPLEMENT_STATIC_NAME +#define IMPLEMENT_STATIC_NAME(c)\ +char const* c::static_name ()\ +{ return type_str_.ch_C (); }\ +size_t c::static_class_size () { return sizeof (c); } + +IMPLEMENT_IS_TYPE_B (Graphical_lisp_element); + +Graphical_lisp_element::Graphical_lisp_element (String str) +{ + type_str_ = str; +} + +void* +Graphical_lisp_element::access (String str) +{ + SCM scm; +// scm = gh_cons (gh_str02scm (str.ch_C ())); +// scm = gh_cons (gh_symbol2scm (str.ch_C ())); + return 0; +} + +void +Graphical_lisp_element::call (String str, void* p) +{ +// gh_apply (str.ch_C (), SCM_EOL); +// gh_apply (str.ch_C (), SCM_EOL); + +// mm, common lisp only? +// String ptr = to_str (" \\%x", p); + String ptr = to_str (" '%x", p); + str = "(" + str + ptr + ")"; + gh_eval_str (str.ch_l ()); +// gh_eval_str ("(add-column 0)"); +} diff --git a/lily/include/auto-plet-engraver.hh b/lily/include/auto-plet-engraver.hh index a8cafb9c7c..14b1fefcc4 100644 --- a/lily/include/auto-plet-engraver.hh +++ b/lily/include/auto-plet-engraver.hh @@ -23,8 +23,8 @@ public: protected: Link_array bracket_req_arr_; - Link_array started_span_p_arr_; - Link_array stop_now_span_p_arr_; + Link_array started_span_p_arr_; + Link_array stop_now_span_p_arr_; virtual void do_removal_processing (); virtual void acknowledge_element (Score_element_info); diff --git a/lily/include/engraver.hh b/lily/include/engraver.hh index a8086af1f5..04fc21baa5 100644 --- a/lily/include/engraver.hh +++ b/lily/include/engraver.hh @@ -36,6 +36,7 @@ protected: Invoke walker method to typeset element. Default: pass on to daddy. */ virtual void typeset_element (Score_element*elem_p); + virtual void typeset_element (Graphical_lisp_element*); /** take note of item/spanner diff --git a/lily/include/graphical-lisp-element.hh b/lily/include/graphical-lisp-element.hh new file mode 100644 index 0000000000..036b727c77 --- /dev/null +++ b/lily/include/graphical-lisp-element.hh @@ -0,0 +1,39 @@ +/* + graphical-lisp-element.hh -- declare Graphical_lisp_element + + source file of the GNU LilyPond music typesetter + + (c) 1998 Jan Nieuwenhuizen +*/ + + +#ifndef GRAPHICAL_LISP_ELEMENT_HH +#define GRAPHICAL_LISP_ELEMENT_HH + +#include "lily-guile.hh" +#include "lily-proto.hh" +#include "string.hh" + +#define virtual +#define static +#include "virtual-methods.hh" + +class Graphical_lisp_element +{ +public: + DECLARE_MY_RUNTIME_TYPEINFO; + + Graphical_lisp_element (String); + + void* access (String); + void call (String, void*); + +private: + String type_str_; +}; + +#undef virtual +#undef static + +#endif // GRAPHICAL_LISP_ELEMENT_HH + diff --git a/lily/include/lily-guile.hh b/lily/include/lily-guile.hh new file mode 100644 index 0000000000..2e626b2880 --- /dev/null +++ b/lily/include/lily-guile.hh @@ -0,0 +1,16 @@ +/* + lily-guile.hh encapsulate guile + + source file of the GNU LilyPond music typesetter + + (c) 1998 Jan Nieuwenhuizen +*/ + +#ifndef LILY_GUILE_HH +#define LILY_GUILE_HH + +extern "C" { +#include +} + +#endif // LILY_GUILE_HH diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index b7af83ec16..184eec14c0 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -77,6 +77,7 @@ struct Element_group_item; struct Engraver_group_engraver; struct General_script_def; struct Graphical_element; +struct Graphical_lisp_element; struct Graphical_axis_group; struct Mark_req; struct Music_output; diff --git a/lily/include/score-element-info.hh b/lily/include/score-element-info.hh index 95d69a0d48..34a5a49716 100644 --- a/lily/include/score-element-info.hh +++ b/lily/include/score-element-info.hh @@ -19,10 +19,12 @@ */ struct Score_element_info { Score_element * elem_l_; + Graphical_lisp_element * lisp_l_; Request*req_l_; Array origin_grav_l_arr_; Score_element_info (Score_element*, Request*); + Score_element_info (Graphical_lisp_element*, Request*); Score_element_info(); }; diff --git a/lily/include/score-engraver.hh b/lily/include/score-engraver.hh index 5d59fc06f7..2f7883bb41 100644 --- a/lily/include/score-engraver.hh +++ b/lily/include/score-engraver.hh @@ -53,6 +53,7 @@ protected: virtual void announce_element (Score_element_info); virtual void do_announces(); virtual void typeset_element (Score_element*elem_p); + virtual void typeset_element (Graphical_lisp_element*elem_p); virtual void do_pre_move_processing(); virtual void do_add_processing (); }; diff --git a/lily/main.cc b/lily/main.cc index 33df5a1c83..d6b90e1359 100644 --- a/lily/main.cc +++ b/lily/main.cc @@ -10,6 +10,8 @@ #include #include #include +#include "lily-guile.hh" + #include "proto.hh" #include "dimensions.hh" #include "plist.hh" @@ -24,6 +26,7 @@ #include "ps-lookup.hh" #include "tex-lookup.hh" + #if HAVE_GETTEXT #include #endif @@ -185,9 +188,17 @@ identify () *mlog << get_version_str () << endl; } -int -main (int argc, char **argv) +void +guile_init () { + gh_eval_str ("(define (add-column p) (display \"adding column (in guile): \") (display p) (newline))"); +} + +void +main_prog (int argc, char **argv) +{ + guile_init (); + // facilitate binary distributions char const *env_lily = getenv ("LILYPONDPREFIX"); String prefix_directory; @@ -327,6 +338,13 @@ main (int argc, char **argv) do_one_file (i, default_outname_base_global); } +// return exit_status_i_; +} + +int +main (int argc, char **argv) +{ + gh_enter (argc, argv, (void(*)())main_prog); return exit_status_i_; } diff --git a/lily/score-element-info.cc b/lily/score-element-info.cc index a0c6f68e85..8288c16cc1 100644 --- a/lily/score-element-info.cc +++ b/lily/score-element-info.cc @@ -12,12 +12,21 @@ Score_element_info::Score_element_info (Score_element*s_l, Request*r_l) { elem_l_ = s_l; + lisp_l_ = 0; + req_l_ = r_l; +} + +Score_element_info::Score_element_info (Graphical_lisp_element*g_l, Request*r_l) +{ + elem_l_ = 0; + lisp_l_ = g_l; req_l_ = r_l; } Score_element_info::Score_element_info() { elem_l_ = 0; + lisp_l_ = 0; req_l_ = 0; } diff --git a/lily/score-engraver.cc b/lily/score-engraver.cc index 1b30731fd7..1c43b8c59e 100644 --- a/lily/score-engraver.cc +++ b/lily/score-engraver.cc @@ -16,6 +16,7 @@ #include "score-column.hh" #include "command-request.hh" #include "paper-def.hh" +#include "graphical-lisp-element.hh" Score_engraver::Score_engraver() @@ -117,7 +118,14 @@ Score_engraver::do_announces() void Score_engraver::typeset_element (Score_element *elem_p) { - elem_p_arr_.push(elem_p); + elem_p_arr_.push (elem_p); +} + +void +Score_engraver::typeset_element (Graphical_lisp_element* elem_p) +{ + *mlog << "not typesetting: " << elem_p->static_name () << "\n"; + delete elem_p; } void @@ -131,9 +139,7 @@ Score_engraver::typeset_all() Spanner *s = elem_p->access_Spanner (); pscore_p_->typeset_unbroken_spanner (s); - - - /* + /* do something sensible if spanner not spanned on 2 items. */ @@ -228,7 +234,6 @@ Score_engraver::get_staff_info() const } - Music_output* Score_engraver::get_output_p () { diff --git a/make/STATE-VECTOR b/make/STATE-VECTOR index 79dc5319e7..26f86d5caf 100644 --- a/make/STATE-VECTOR +++ b/make/STATE-VECTOR @@ -101,3 +101,4 @@ 1.0.14.hwn1 1.0.15 1.0.15.jcn1 +1.0.15.jcn2 -- 2.39.2