]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/scm-option.cc
*** empty log message ***
[lilypond.git] / lily / scm-option.cc
index 5e38876b0d456b33ca5d90928fc0bf1f9aadb72b..d05f3a06f94798fab16484505c85940ab7551023 100644 (file)
@@ -3,15 +3,16 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 2001--2002  Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 2001--2003  Han-Wen Nienhuys <hanwen@cs.uu.nl>
   
  */
+#include <stdio.h>
 
-#include <iostream.h>
+#include "parse-scm.hh"
 #include "string.hh"
 #include "lily-guile.hh"
 #include "scm-option.hh"
-
+#include "warn.hh"
 
 /*
   This interface to option setting is meant for setting options are
@@ -33,42 +34,65 @@ bool midi_debug_global_b;
 /* General purpose testing flag */
 int testing_level_global;
 
-
-
 /*
+  crash if internally the wrong type is used for a grob property.
+ */
+bool internal_type_checking_global_b;
+
+LY_DEFINE (ly_option_usage, "ly:option-usage", 0, 0, 0, (SCM),
+                 "Print ly-set-option usage")
+{  
+  printf ( _("lilypond -e EXPR means:").to_str0 ());
+  puts ("");
+  printf (_ ("  Evalute the Scheme EXPR before parsing any .ly files.").to_str0 ());
+  puts ("");
+  printf (_ ("  Multiple -e options may be given, they will be evaluated sequentially.").to_str0 ());
+  puts ("");
+  printf (_("  The function ly-set-option allows for access to some internal variables.").to_str0 ());
+  puts ("\n");
+  printf (_ ("Usage: lilypond -e \"(ly-set-option SYMBOL VAL)\"").to_str0 ());
+  puts ("\n");
+  printf (_ ("Where SYMBOL VAL pair is any of:").to_str0 ());
+  puts ("");
+  printf ( "  help ANY-SYMBOL\n"
+          "  internal-type-checking BOOLEAN\n"
+          "  midi-debug BOOLEAN\n"
+          "  parse-protect BOOLEAN\n"
+          "  testing-level INTEGER\n");
+  
+  exit (0);
+  return SCM_UNSPECIFIED;
+}
 
-  TODO: verzin iets tegen optie code bloot
-
-
-  other interesting stuff to add:
+/* Add these as well:
 
 @item -T,--no-timestamps
 don't timestamp the output
 
 @item -t,--test
-Switch on any experimental features.  Not for general public use.
-
- */
-
-SCM
-set_lily_option (SCM var, SCM val)
+Switch on any experimental features.  Not for general public use. */
+LY_DEFINE (ly_set_option, "ly:set-option", 2, 0, 0, (SCM var, SCM val),
+           "Set a global option value.  Supported options include\n"
+"\n"
+"@table @code\n"
+"@item help\n"
+"List all options.\n"
+"@item midi-debug\n"
+"If set to true, generate human readable MIDI\n"
+"@item internal-type-checking\n"
+"Set paranoia for property assignments\n"
+"@item parse-protect\n"
+"If protection is switched on, errors in inline scheme are caught in the parser. \n"
+"If off, GUILE will halt on errors, and give a stack trace. Default is protected evaluation. \n"
+"@end table\n"
+"\n"
+"This function is useful to call from the command line: @code{lilypond -e\n"
+"\"(ly-set-option 'midi-debug #t)\"}.\n")
 {
-  /*
-    Scheme option usage:
-    lilypond -e "(set-lily-option 'help 0)"
-   */
   if (var == ly_symbol2scm ("help"))
     {
-      cout << '\n';
-      cout << _ ("Scheme options:");
-      cout << '\n';
-      cout << "  help (any-symbol)"; 
-      cout << '\n';
-      cout << "  midi-debug (boolean)"; 
-      cout << '\n';
-      cout << "  testing-level (int)"; 
-      cout << '\n';
-      exit (0);
+      /* lilypond -e "(ly-set-option 'help #t)" */
+      ly_option_usage (SCM_EOL);
     }
   else if (var == ly_symbol2scm ("midi-debug"))
     {
@@ -78,6 +102,14 @@ set_lily_option (SCM var, SCM val)
     {
      testing_level_global = gh_scm2int (val); 
     }
+  else if (var == ly_symbol2scm ("parse-protect" ))
+    {
+      parse_protect_global = to_boolean(val);
+    }
+  else if (var == ly_symbol2scm ("internal-type-checking"))
+    {
+     internal_type_checking_global_b = to_boolean (val); 
+    }
   else if (var == ly_symbol2scm ("find-old-relative"))
     {
       /*
@@ -89,22 +121,14 @@ set_lily_option (SCM var, SCM val)
 
        
       */
-
       ;
-      
+    }
+  else
+    {
+      warning (_("Unknown internal option!"));
     }
 
   return SCM_UNSPECIFIED;
 }
 
 
-static void
-init_functions ()
-{
-  scm_c_define_gsubr ("set-lily-option", 2, 0, 0, (Scheme_function_unknown)set_lily_option);
-}
-
-
-ADD_SCM_INIT_FUNC (init_functions_sopt, init_functions);
-
-