#include "lily-version.hh"
#include "ly-module.hh"
#include "main.hh"
+#include "page.hh"
#include "paper-book.hh"
#include "paper-def.hh"
#include "paper-line.hh"
#include "paper-outputter.hh"
+#include "file-name.hh"
#include "scm-hash.hh"
#include "stencil.hh"
#include "string-convert.hh"
#include "warn.hh"
+// JUNKME
+extern SCM stencil2line (Stencil* stil, bool is_title = false);
Paper_outputter::Paper_outputter (String filename)
{
- if (safe_global_b)
- scm_define (ly_symbol2scm ("safe-mode?"), SCM_BOOL_T);
-
+ filename_ = filename;
file_ = scm_open_file (scm_makfrom0str (filename.to_str0 ()),
scm_makfrom0str ("w"));
+ if (safe_global_b)
+ scm_define (ly_symbol2scm ("safe-mode?"), SCM_BOOL_T);
+
String module_name = "scm output-" + output_format_global;
if (safe_global_b)
{
fields
= scm_cons (ly_symbol2scm (dump_header_fieldnames_global[i].to_str0 ()),
fields);
+
+ File_name file_name (filename_);
+ file_name.ext_ = "";
+ String basename = file_name.to_string ();
output_scheme (scm_list_n (ly_symbol2scm ("output-scopes"),
paper->self_scm (),
ly_quote_scm (scopes),
ly_quote_scm (fields),
- scm_makfrom0str (basename_.to_str0 ()),
+ scm_makfrom0str (basename.to_str0 ()),
SCM_UNDEFINED));
}
void
Paper_outputter::output_line (SCM line, Offset *origin, bool is_last)
{
- Paper_line *pl = unsmob_paper_line (line);
- Offset dim = pl->dim ();
+ Paper_line *p = unsmob_paper_line (line);
+ Offset dim = p->dim ();
if (dim[Y_AXIS] > 50 CM)
{
- programming_error ("Improbable system height.");
+ programming_error (to_string ("Improbable line height: %f",
+ dim[Y_AXIS]));
dim[Y_AXIS] = 50 CM;
}
ly_quote_scm (ly_offset2scm (*origin)),
ly_quote_scm (ly_offset2scm (dim))));
- for (SCM s = pl->stencils (); ly_c_pair_p (s); s = ly_cdr (s))
- output_expr (unsmob_stencil (ly_car (s))->get_expr (), Offset (0, 0));
+ output_stencil (unsmob_stencil (p->to_stencil ()));
+ (*origin)[Y_AXIS] += dim[Y_AXIS];
output_scheme (scm_list_2 (ly_symbol2scm ("stop-system"),
ly_bool2scm (is_last)));
+}
- (*origin)[Y_AXIS] += dim[Y_AXIS];
+void
+Paper_outputter::output_page (Page *p, bool is_last)
+{
+ output_scheme (scm_list_1 (ly_symbol2scm ("start-page")));
+
+ output_scheme (scm_list_3 (ly_symbol2scm ("start-system"),
+ ly_quote_scm (ly_offset2scm (Offset (0, 0))),
+ ly_quote_scm (ly_offset2scm (Offset (0, 0)))));
+
+ output_stencil (unsmob_stencil (p->to_stencil ()));
+
+ output_scheme (scm_list_2 (ly_symbol2scm ("stop-system"), SCM_BOOL_T));
+ output_scheme (scm_list_2 (ly_symbol2scm ("stop-page"),
+ ly_bool2scm (is_last
+ && !unsmob_stencil (p->footer_))));
}
+void
+Paper_outputter::output_music_output_def (Music_output_def *odef)
+{
+ output_scheme (scm_list_2 (ly_symbol2scm ("output-paper-def"),
+ odef->self_scm ()));
+}
void
-Paper_outputter::output_music_output_def (Music_output_def* odef)
+Paper_outputter::output_stencil (Stencil *stil)
{
- output_scheme (scm_list_n (ly_symbol2scm ("output-paper-def"),
- odef->self_scm (), SCM_UNDEFINED));
+ output_expr (stil->expr (), stil->origin ());
}
/* TODO: replaceme/rewriteme, see output-ps.scm: output-stencil */
SCM head =ly_car (expr);
if (unsmob_input (head))
{
- Input * ip = unsmob_input (head);
-
- output_scheme (scm_list_n (ly_symbol2scm ("define-origin"),
- scm_makfrom0str (ip->file_string ().to_str0 ()),
- scm_int2num (ip->line_number ()),
- scm_int2num (ip->column_number ()),
- SCM_UNDEFINED));
+ Input *ip = unsmob_input (head);
+ output_scheme (scm_list_4 (ly_symbol2scm ("define-origin"),
+ scm_makfrom0str (ip->file_string ()
+ .to_str0 ()),
+ scm_int2num (ip->line_number ()),
+ scm_int2num (ip->column_number ())));
expr = ly_cadr (expr);
}
else if (head == ly_symbol2scm ("no-origin"))
{
- output_scheme (scm_list_n (head, SCM_UNDEFINED));
+ output_scheme (scm_list_1 (head));
expr = ly_cadr (expr);
}
else if (head == ly_symbol2scm ("translate-stencil"))
}
else
{
- output_scheme (scm_list_n (ly_symbol2scm ("placebox"),
+ output_scheme (scm_list_4 (ly_symbol2scm ("placebox"),
scm_make_real (o[X_AXIS]),
scm_make_real (o[Y_AXIS]),
- expr,
- SCM_UNDEFINED));
+ expr));
return;
}
}
}
-