From: Nicolas Sceaux Date: Sun, 13 Feb 2005 13:39:03 +0000 (+0000) Subject: (define-safe-public): new macro for defining X-Git-Tag: release/2.5.14~134 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=25eddcf77cbef1d2804cd4b7afab6a0906ef993c;p=lilypond.git (define-safe-public): new macro for defining variables that can be used in --safe mode. Use it in *.scm instead of manually setting safe-objects in safe-lily.scm. --- diff --git a/ChangeLog b/ChangeLog index 013820ce52..8d55d1754f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-02-13 Nicolas Sceaux + + * scm/lily.scm (define-safe-public): new macro for defining + variables that can be used in --safe mode. Use it in *.scm + instead of manually setting safe-objects in safe-lily.scm. + 2005-02-11 Han-Wen Nienhuys * Slur-dash patch by Bertalan. diff --git a/scm/chord-entry.scm b/scm/chord-entry.scm index ccfa0877d0..80c3199c4c 100644 --- a/scm/chord-entry.scm +++ b/scm/chord-entry.scm @@ -206,7 +206,7 @@ DURATION, and INVERSION." (define (sus-modifier pitches) (remove-step (pitch-step (ly:make-pitch 0 2 0)) pitches)) -(define-public default-chord-modifier-list +(define-safe-public default-chord-modifier-list `((m . ,minor-modifier) (min . ,minor-modifier) (aug . , aug-modifier) diff --git a/scm/chord-name.scm b/scm/chord-name.scm index 186b035bf7..e05469f0db 100644 --- a/scm/chord-name.scm +++ b/scm/chord-name.scm @@ -39,7 +39,7 @@ (vector-ref #("C" "D" "E" "F" "G" "A" "B") (ly:pitch-notename pitch))) (accidental->markup (ly:pitch-alteration pitch))))) -(define-public ((chord-name->german-markup B-instead-of-Bb) pitch) +(define-safe-public ((chord-name->german-markup B-instead-of-Bb) pitch) "Return pitch markup for PITCH, using german note names. If B-instead-of-Bb is set to #t real german names are returned. Otherwise semi-german names (with Bb and below keeping the british names) @@ -56,7 +56,7 @@ (make-normal-size-super-markup (accidental->markup (cdr n-a))))))) -(define-public (note-name->german-markup pitch) +(define-safe-public (note-name->german-markup pitch) (let* ((name (ly:pitch-notename pitch)) (alt (ly:pitch-alteration pitch)) (n-a (if (member (cons name alt) `((6 . ,FLAT) (6 . ,DOUBLE-FLAT))) @@ -72,7 +72,7 @@ ;; fixme we should standardize on omit-root (or the other one.) ;; perhaps the default should also be reversed --hwn -(define-public (sequential-music-to-chord-exceptions seq . rest) +(define-safe-public (sequential-music-to-chord-exceptions seq . rest) "Transform sequential music SEQ of type <>-\\markup{ foobar } to (cons CDE-PITCHES FOOBAR-MARKUP), or to (cons DE-PITCHES FOOBAR-MARKUP) if OMIT-ROOT is given and non-false. diff --git a/scm/define-music-types.scm b/scm/define-music-types.scm index 73ab524a2f..2187d3976c 100644 --- a/scm/define-music-types.scm +++ b/scm/define-music-types.scm @@ -790,7 +790,7 @@ Syntax: @code{\\\\}") (cons (car x) lst))) music-descriptions)) -(define-public (make-music name . music-properties) +(define-safe-public (make-music name . music-properties) "Create a music object of given name, and set its properties according to `music-properties', a list of alterning property symbols and values. E.g: diff --git a/scm/lily-library.scm b/scm/lily-library.scm index 4809aa52f3..1b1ce33d78 100644 --- a/scm/lily-library.scm +++ b/scm/lily-library.scm @@ -8,24 +8,24 @@ (define-public X 0) (define-public Y 1) -(define-public START -1) -(define-public STOP 1) +(define-safe-public START -1) +(define-safe-public STOP 1) (define-public LEFT -1) (define-public RIGHT 1) (define-public UP 1) (define-public DOWN -1) (define-public CENTER 0) -(define-public DOUBLE-FLAT -4) -(define-public THREE-Q-FLAT -3) -(define-public FLAT -2) -(define-public SEMI-FLAT -1) -(define-public NATURAL 0) -(define-public SEMI-SHARP 1) -(define-public SHARP 2) -(define-public THREE-Q-SHARP 3) -(define-public DOUBLE-SHARP 4) -(define-public SEMI-TONE 2) +(define-safe-public DOUBLE-FLAT -4) +(define-safe-public THREE-Q-FLAT -3) +(define-safe-public FLAT -2) +(define-safe-public SEMI-FLAT -1) +(define-safe-public NATURAL 0) +(define-safe-public SEMI-SHARP 1) +(define-safe-public SHARP 2) +(define-safe-public THREE-Q-SHARP 3) +(define-safe-public DOUBLE-SHARP 4) +(define-safe-public SEMI-TONE 2) (define-public ZERO-MOMENT (ly:make-moment 0 1)) @@ -146,7 +146,7 @@ found." '() t)))) ;; todo: code dup with C++. -(define-public (alist->hash-table lst) +(define-safe-public (alist->hash-table lst) "Convert alist to table" (let ((m (make-hash-table (length lst)))) (map (lambda (k-v) (hashq-set! m (car k-v) (cdr k-v))) lst) diff --git a/scm/lily.scm b/scm/lily.scm index f1fdca952e..035c06d0ee 100644 --- a/scm/lily.scm +++ b/scm/lily.scm @@ -13,6 +13,7 @@ (use-modules (ice-9 regex) (ice-9 safe) + (ice-9 optargs) (oop goops) (srfi srfi-1) ; lists (srfi srfi-13)) ; strings @@ -155,6 +156,26 @@ predicates. Print a message at LOCATION if any predicate failed." placebox unknown)) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Safe definitions utility +(define safe-objects (list)) + +(define-macro (define-safe-public arglist . body) + "Define a variable, export it, and mark it as safe, ie usable in LilyPond safe mode. +The syntax is the same as `define*-public'." + (define (get-symbol arg) + (if (pair? arg) + (get-symbol (car arg)) + arg)) + (let ((safe-symbol (get-symbol arglist))) + `(begin + (define*-public ,arglist + ,@body) + (set! safe-objects (cons (cons ',safe-symbol ,safe-symbol) + safe-objects)) + ,safe-symbol))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; other files. diff --git a/scm/music-functions.scm b/scm/music-functions.scm index 7d00d8d6aa..0323be7a12 100644 --- a/scm/music-functions.scm +++ b/scm/music-functions.scm @@ -190,7 +190,7 @@ i.e. this is not an override" (define direction-polyphonic-grobs '(Stem Tie Rest Slur Script TextScript Dots DotColumn Fingering)) -(define-public (make-voice-props-set n) +(define-safe-public (make-voice-props-set n) (make-sequential-music (append (map (lambda (x) (make-grob-property-set x 'direction @@ -200,7 +200,7 @@ i.e. this is not an override" (make-grob-property-set 'NoteColumn 'horizontal-shift (quotient n 2)) (make-grob-property-set 'MultiMeasureRest 'staff-position (if (odd? n) -4 4)))))) -(define-public (make-voice-props-revert) +(define-safe-public (make-voice-props-revert) (make-sequential-music (append (map (lambda (x) (make-grob-property-revert x 'direction)) @@ -209,7 +209,7 @@ i.e. this is not an override" (list (make-grob-property-revert 'MultiMeasureRest 'staff-position))))) -(define*-public (context-spec-music m context #:optional id) +(define-safe-public (context-spec-music m context #:optional id) "Add \\context CONTEXT = ID to M. " (let ((cm (make-music 'ContextSpeccedMusic 'element m @@ -240,7 +240,7 @@ i.e. this is not an override" (make-music 'SimultaneousMusic 'elements elts)) -(define-public (make-event-chord elts) +(define-safe-public (make-event-chord elts) (make-music 'EventChord 'elements elts)) @@ -355,12 +355,12 @@ of beat groupings " (define-public (set-time-signature num den . rest) (ly:export (apply make-time-signature-set `(,num ,den . ,rest)))) -(define-public (make-penalty-music pen page-pen) +(define-safe-public (make-penalty-music pen page-pen) (make-music 'BreakEvent 'penalty pen 'page-penalty page-pen)) -(define-public (make-articulation name) +(define-safe-public (make-articulation name) (make-music 'ArticulationEvent 'articulation-type name)) @@ -369,7 +369,7 @@ of beat groupings " 'duration duration 'text string)) -(define-public (make-span-event type spandir) +(define-safe-public (make-span-event type spandir) (make-music type 'span-direction spandir)) diff --git a/scm/output-lib.scm b/scm/output-lib.scm index f20bbdda78..db5a1fb3b1 100644 --- a/scm/output-lib.scm +++ b/scm/output-lib.scm @@ -216,14 +216,14 @@ centered, X==1 is at the right, X == -1 is at the left." (define-public (default-bar-number-visibility barnum) (> barnum 1)) ;; See documentation of Item::visibility_lambda_ -(define-public (begin-of-line-visible d) (if (= d 1) '(#f . #f) '(#t . #t))) -(define-public (end-of-line-visible d) (if (= d -1) '(#f . #f) '(#t . #t))) -(define-public (spanbar-begin-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f))) - -(define-public (all-visible d) '(#f . #f)) -(define-public (all-invisible d) '(#t . #t)) -(define-public (begin-of-line-invisible d) (if (= d 1) '(#t . #t) '(#f . #f))) -(define-public (end-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f))) +(define-safe-public (begin-of-line-visible d) (if (= d 1) '(#f . #f) '(#t . #t))) +(define-safe-public (end-of-line-visible d) (if (= d -1) '(#f . #f) '(#t . #t))) +(define-safe-public (spanbar-begin-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f))) + +(define-safe-public (all-visible d) '(#f . #f)) +(define-safe-public (all-invisible d) '(#t . #t)) +(define-safe-public (begin-of-line-invisible d) (if (= d 1) '(#t . #t) '(#f . #f))) +(define-safe-public (end-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/scm/paper.scm b/scm/paper.scm index cdcebe6908..03e3112d95 100644 --- a/scm/paper.scm +++ b/scm/paper.scm @@ -50,7 +50,7 @@ (module-define! m 'blotdiameter (* 0.35 pt)) (module-define! m 'interscoreline (* 4 mm)))) -(define-public (set-global-staff-size sz) +(define-safe-public (set-global-staff-size sz) "Set the default staff size, where SZ is thought to be in PT." (let* ((old-mod (current-module)) (pap (eval '$defaultpaper old-mod)) @@ -126,7 +126,7 @@ (else (ly:warn (string-append "Unknown papersize: " name)))))) -(define-public (set-default-paper-size name . rest) +(define-safe-public (set-default-paper-size name . rest) (internal-set-paper-size (ly:output-def-scope (eval '$defaultpaper (current-module))) name diff --git a/scm/part-combiner.scm b/scm/part-combiner.scm index 65ce520d21..2ea2bd1e1e 100644 --- a/scm/part-combiner.scm +++ b/scm/part-combiner.scm @@ -188,7 +188,7 @@ Voice-state objects (define part-combine-listener '()) ; UGH - should pass noticed setter to part-combine-listener -(define-public (set-part-combine-listener x) +(define-safe-public (set-part-combine-listener x) (set! part-combine-listener x)) (define-public (notice-the-events-for-pc context lst) diff --git a/scm/safe-lily.scm b/scm/safe-lily.scm index 3bc46e52b0..32adc29083 100644 --- a/scm/safe-lily.scm +++ b/scm/safe-lily.scm @@ -4,292 +4,251 @@ ;;;; ;;;; (c) 2004 Han-Wen Nienhuys -(define safe-objects - (map - (lambda (sym) - (cons sym (primitive-eval sym))) - '(ly:add-interface - ly:add-moment - ly:all-grob-interfaces - ly:all-output-backend-commands - ly:all-stencil-expressions - ly:bracket - ly:context-find - ly:context-id - ly:context-name - ly:context-parent - ly:context-property - ly:context-property-where-defined - ly:context-pushpop-property - ly:context-set-property! - ly:context-unset-property - ly:context? - ly:dimension? - ly:dir? - ly:div-moment - ly:duration-dot-count - ly:duration-factor - ly:duration-log - ly:durationstring - ly:option-usage - ly:output-def-clone - ly:output-def-scope - ly:output-description - ly:paper-book? - ly:layout-def? - ly:paper-get-font - ly:paper-get-number - ly:paper-system-break-before-penalty - ly:paper-system-extent - ly:paper-system-number - ly:paper-system-stencil - ly:paper-system? - ly:output-def-lookup - ly:parse-string - ly:parser-parse-string - ly:parser-print-book - ly:parser-print-score - ly:pitch-alteration - ly:pitch-diff - ly:pitch-notename - ly:pitch-octave - ly:pitch-quartertones - ly:pitch-semitones - ly:pitch-steps - ly:pitch-transpose - ly:pitchstring + ly:option-usage + ly:output-def-clone + ly:output-def-scope + ly:output-description + ly:paper-book? + ly:layout-def? + ly:paper-get-font + ly:paper-get-number + ly:paper-system-break-before-penalty + ly:paper-system-extent + ly:paper-system-number + ly:paper-system-stencil + ly:paper-system? + ly:output-def-lookup + ly:parse-string + ly:parser-parse-string + ly:parser-print-book + ly:parser-print-score + ly:pitch-alteration + ly:pitch-diff + ly:pitch-notename + ly:pitch-octave + ly:pitch-quartertones + ly:pitch-semitones + ly:pitch-steps + ly:pitch-transpose + ly:pitchhash-table - chord-name->german-markup - context-spec-music - default-chord-modifier-list - make-articulation - make-event-chord - make-music - make-penalty-music - make-span-event - make-voice-props-revert - make-voice-props-set - note-name->german-markup - sequential-music-to-chord-exceptions - set-default-paper-size - set-part-combine-listener - - Accidental_interface::after_line_breaking - Accidental_interface::print - Ambitus::print - Arpeggio::print - Arpeggio::brew_chord_bracket - Arpeggio::width_callback - Axis_group_interface::group_extent_callback - Bar_line::before_line_breaking - Bar_line::get_staff_bar_size - Bar_line::print - Beam::after_line_breaking - Beam::before_line_breaking - Beam::check_concave - Beam::least_squares - Beam::print - Beam::quanting - Beam::shift_region_to_valid - Beam::slope_damping - Beam::space_function - Break_align_interface::alignment_callback - Breathing_sign::offset_callback - Chord_name::after_line_breaking - Clef::before_line_breaking - Clef::print - Cluster::print - Cluster_beacon::height - Custos::print - Dot_column::side_position - Dots::print - Hairpin::print - Hara_kiri_group_spanner::force_hara_kiri_callback - Hara_kiri_group_spanner::y_extent - Horizontal_bracket::print - Hyphen_spanner::print - Hyphen_spanner::set_spacing_rods - Key_signature_interface::print - Line_spanner::after_line_breaking - Line_spanner::print - Lyric_extender::print - Measure_grouping::print - Mensural_ligature::brew_ligature_primitive - Mensural_ligature::print - Multi_measure_rest::percent - Multi_measure_rest::print - Multi_measure_rest::set_spacing_rods - Note_head::print - Note_head::brew_ez_stencil - Ottava_bracket::print - Paper_column::before_line_breaking - Paper_column::print - Percent_repeat_item_interface::beat_slash - Percent_repeat_item_interface::double_percent - Piano_pedal_bracket::print - Rest::after_line_breaking - Rest::extent_callback - Rest::polyphonic_offset_callback - Rest::print - Script_column::before_line_breaking - Script_interface::before_line_breaking - Script_interface::print - Self_alignment_interface::aligned_on_parent - Self_alignment_interface::aligned_on_self - Self_alignment_interface::centered_on_other_axis_parent - Self_alignment_interface::centered_on_parent - Separating_group_spanner::set_spacing_rods - Side_position_interface::aligned_on_support_refpoints - Side_position_interface::aligned_side - Slur::after_line_breaking - Slur::height - Slur::print - Spacing_spanner::set_springs - Span_bar::before_line_breaking - Span_bar::get_bar_size - Span_bar::print - Span_bar::width_callback - Spanner::set_spacing_rods - Staff_symbol::print - Staff_symbol_referencer::callback - Stem::before_line_breaking - Stem::width_callback - Stem::height - Stem::offset_callback - Stem::print - Stem_tremolo::height - Stem_tremolo::print - Sustain_pedal::print - System_start_delimiter::after_line_breaking - System_start_delimiter::print - Text_interface::print - Text_spanner::print - Tie::print - Tie_column::after_line_breaking - Time_signature::print - Tuplet_bracket::after_line_breaking - Tuplet_bracket::before_line_breaking - Tuplet_bracket::print - Vaticana_ligature::brew_ligature_primitive - Vaticana_ligature::print - Volta_bracket_interface::print - - begin-of-line-invisible - begin-of-line-visible - - end-of-line-invisible - end-of-line-visible - - ))) + Accidental_interface::after_line_breaking + Accidental_interface::print + Ambitus::print + Arpeggio::print + Arpeggio::brew_chord_bracket + Arpeggio::width_callback + Axis_group_interface::group_extent_callback + Bar_line::before_line_breaking + Bar_line::get_staff_bar_size + Bar_line::print + Beam::after_line_breaking + Beam::before_line_breaking + Beam::check_concave + Beam::least_squares + Beam::print + Beam::quanting + Beam::shift_region_to_valid + Beam::slope_damping + Beam::space_function + Break_align_interface::alignment_callback + Breathing_sign::offset_callback + Chord_name::after_line_breaking + Clef::before_line_breaking + Clef::print + Cluster::print + Cluster_beacon::height + Custos::print + Dot_column::side_position + Dots::print + Hairpin::print + Hara_kiri_group_spanner::force_hara_kiri_callback + Hara_kiri_group_spanner::y_extent + Horizontal_bracket::print + Hyphen_spanner::print + Hyphen_spanner::set_spacing_rods + Key_signature_interface::print + Line_spanner::after_line_breaking + Line_spanner::print + Lyric_extender::print + Measure_grouping::print + Mensural_ligature::brew_ligature_primitive + Mensural_ligature::print + Multi_measure_rest::percent + Multi_measure_rest::print + Multi_measure_rest::set_spacing_rods + Note_head::print + Note_head::brew_ez_stencil + Ottava_bracket::print + Paper_column::before_line_breaking + Paper_column::print + Percent_repeat_item_interface::beat_slash + Percent_repeat_item_interface::double_percent + Piano_pedal_bracket::print + Rest::after_line_breaking + Rest::extent_callback + Rest::polyphonic_offset_callback + Rest::print + Script_column::before_line_breaking + Script_interface::before_line_breaking + Script_interface::print + Self_alignment_interface::aligned_on_parent + Self_alignment_interface::aligned_on_self + Self_alignment_interface::centered_on_other_axis_parent + Self_alignment_interface::centered_on_parent + Separating_group_spanner::set_spacing_rods + Side_position_interface::aligned_on_support_refpoints + Side_position_interface::aligned_side + Slur::after_line_breaking + Slur::height + Slur::print + Spacing_spanner::set_springs + Span_bar::before_line_breaking + Span_bar::get_bar_size + Span_bar::print + Span_bar::width_callback + Spanner::set_spacing_rods + Staff_symbol::print + Staff_symbol_referencer::callback + Stem::before_line_breaking + Stem::width_callback + Stem::height + Stem::offset_callback + Stem::print + Stem_tremolo::height + Stem_tremolo::print + Sustain_pedal::print + System_start_delimiter::after_line_breaking + System_start_delimiter::print + Text_interface::print + Text_spanner::print + Tie::print + Tie_column::after_line_breaking + Time_signature::print + Tuplet_bracket::after_line_breaking + Tuplet_bracket::before_line_breaking + Tuplet_bracket::print + Vaticana_ligature::brew_ligature_primitive + Vaticana_ligature::print + Volta_bracket_interface::print + )) (define-public (make-safe-lilypond-module) (let* ((m (make-safe-module)))